Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

看語句 #557

Merged
merged 22 commits into from
Jul 6, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
8981d84
加整合試驗固定結果
sih4sing5hong5 Mar 11, 2018
de74532
加粗坯型式的
sih4sing5hong5 Mar 11, 2018
92e93f5
加試驗到tox
sih4sing5hong5 Mar 11, 2018
35a6c72
Update Test字串物件一致整合試驗.py
sih4sing5hong5 May 9, 2018
eda3d6d
feat: 試驗的輕聲字免加0,改由敢有輕聲標記()負責紀錄。
May 10, 2018
ea1833b
fix: 正在做看語句()
May 10, 2018
7ee296d
fix: 正在處理test_型有輕聲符,改 _對齊型音處理刪節號()
May 11, 2018
ca8388d
fix: _對齊型音處理刪節號()修改變數名稱。
May 14, 2018
0634f3f
fix: 型或音有輕聲符都要當作對齊輕聲字。
May 14, 2018
4075bc0
feat: 對齊和前面語句不連寫的輕聲詞的型和音,例如:食飽 矣。
May 14, 2018
bdc2a29
fix: 先確定一个詞的型音長度相同,再對齊該詞。
May 15, 2018
b51c548
fix: 提掉print。
May 15, 2018
edc7087
Merge remote-tracking branch 'origin/master' into 物件轉字串愛kah原本一樣
May 15, 2018
b6e8887
整合試驗加全型標點符號kah連續輕聲。
Jul 2, 2018
1e6fe72
整合試驗 ka 試驗
Jul 5, 2018
3a248b7
看語句()免傳xx符號入去,當咧處理全羅部份的試驗
Jul 5, 2018
757bef3
實做全羅輕聲
Jul 5, 2018
dc13b1d
Merge remote-tracking branch 'origin/master' into 看語句
Jul 5, 2018
0b8d060
實做全漢
Jul 5, 2018
224fd0e
頭前字kah這字攏是羅馬字才加連字符。
Jul 5, 2018
a8ab937
reformat
Jul 6, 2018
6bf0924
修正詞的看型內底用字的看型
Jul 6, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ deps =
coverage
commands =
coverage run --source=臺灣言語工具,試驗 -m unittest discover -p Test標全漢全羅整合試驗.py
coverage run --source=臺灣言語工具,試驗 -a -m unittest discover -p Test字串*整合試驗.py
coverage run --source=臺灣言語工具,試驗 -a -m unittest discover -p Test臺灣閩南語羅馬字拼音調符整合試驗.py

[testenv:HTS整合試驗]
Expand Down
1 change: 1 addition & 0 deletions 臺灣言語工具/基本物件/公用變數.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
分型音符號 = '|'
# a2-bing5 # bo5 tsiah8 png7 代表 bing5 無變調
本調符號 = '#'
輕聲符號 = '--'
# 句中是為著加速標音
句中標點符號 = {
'、', '﹑', '、', '-', '—', '~', '~',
Expand Down
6 changes: 6 additions & 0 deletions 臺灣言語工具/基本物件/句.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,12 @@ def __str__(self):
def __repr__(self):
return self.__str__()

def 看語句(self):
集的型 = []
for 一集 in self.內底集:
集的型.append(一集.看語句())
return 分詞符號.join(集的型)

def 看型(self, 物件分字符號='', 物件分詞符號='', 物件分句符號=''):
集的型 = []
for 一集 in self.內底集:
Expand Down
3 changes: 3 additions & 0 deletions 臺灣言語工具/基本物件/字.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ def __str__(self):
def __repr__(self):
return self.__str__()

def 看語句(self):
return self.型

def 看型(self, 物件分字符號='', 物件分詞符號='', 物件分句符號=''):
return self.型

Expand Down
23 changes: 23 additions & 0 deletions 臺灣言語工具/基本物件/組.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from 臺灣言語工具.基本物件.公用變數 import 無音
from 臺灣言語工具.基本物件.公用變數 import 分型音符號
from 臺灣言語工具.基本物件.功能 import 功能
from 臺灣言語工具.基本物件.公用變數 import 標點符號


class 組(功能):
Expand Down Expand Up @@ -37,6 +38,28 @@ def __str__(self):
def __repr__(self):
return self.__str__()

def 看語句(self):
詞的型陣列 = []
for 一詞 in self.內底詞:
詞型 = 一詞.看語句()
if 詞型 in 標點符號:
# 標點符號
# 先提掉頭前詞後壁的分詞符號(空白)才接入去
try:
del 詞的型陣列[-1]
except IndexError:
pass
詞的型陣列.append(詞型)
else:
# 輕聲詞 '--sui2' => '--sui2 '
# 一般詞 'sui2' => 'sui2 '
詞的型陣列.append(詞型)
詞的型陣列.append(分詞符號)
# 共尾仔ke--khng3的分詞符號提掉
if 詞的型陣列[-1] == 分詞符號:
del 詞的型陣列[-1]
return ''.join(詞的型陣列)

def 看型(self, 物件分字符號='', 物件分詞符號='', 物件分句符號=''):
詞的型 = []
for 一詞 in self.內底詞:
Expand Down
33 changes: 33 additions & 0 deletions 臺灣言語工具/基本物件/詞.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
from 臺灣言語工具.基本物件.公用變數 import 無音
from 臺灣言語工具.基本物件.公用變數 import 分型音符號
from 臺灣言語工具.基本物件.功能 import 功能
from 臺灣言語工具.基本物件.公用變數 import 輕聲符號
from 臺灣言語工具.基本物件.公用變數 import 敢是拼音字元


class 詞(功能):
Expand Down Expand Up @@ -39,6 +41,37 @@ def __str__(self):
def __repr__(self):
return self.__str__()

def 看語句(self):
字型陣列 = []
頂字是羅馬字 = False
for 一字 in self.內底字:
字串 = 一字.看語句()
#
# 先接符號才接字
#
# 接輕聲符(輕聲漢字、輕聲羅馬字)
是輕聲字 = 一字.敢有輕聲標記()
if 是輕聲字:
字型陣列.append(輕聲符號)

# 接連字符(羅-羅)
if (
敢是拼音字元(字串[0]) or (
字串[0] == '0' and 敢是拼音字元(字串[1])
)):
if 頂字是羅馬字 and not 是輕聲字:
字型陣列.append(分字符號)
頂字是羅馬字 = True
else:
頂字是羅馬字 = False

# 接字
字型陣列.append(字串)
# 提掉ke的連字符
if 字型陣列[0] == 分字符號:
字型陣列 = 字型陣列[1:]
return ''.join(字型陣列)

def 看型(self, 物件分字符號='', 物件分詞符號='', 物件分句符號=''):
字的型 = []
for 一字 in self.內底字:
Expand Down
7 changes: 7 additions & 0 deletions 臺灣言語工具/基本物件/集.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,13 @@ def __str__(self):
def __repr__(self):
return self.__str__()

def 看語句(self):
if len(self.內底組) == 0:
raise 解析錯誤('內底組是空的!!')
if len(self.內底組) > 1:
raise 解析錯誤('內底組毋焦一个!!{0}'.format(str(self)))
return self.內底組[0].看語句()

def 看型(self, 物件分字符號='', 物件分詞符號='', 物件分句符號=''):
if len(self.內底組) == 0:
raise 解析錯誤('內底組是空的!!')
Expand Down
66 changes: 49 additions & 17 deletions 臺灣言語工具/解析整理/拆文分析器.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ def 對齊詞物件(cls, 型, 音):
return 組物件.內底詞[0]

# 斷詞會照音來斷,型的連字符攏無算
# 毋過若是型kah音其中一个有輕聲符--,就當作輕聲字
@classmethod
def 對齊組物件(cls, 型, 音):
if not isinstance(型, str):
Expand All @@ -99,11 +100,16 @@ def 對齊組物件(cls, 型, 音):
if 型 == '' and 音 == 無音:
return 組()

全部型陣列 = cls._拆句做字(型.strip(分詞符號))
全部音陣列, 巢狀輕聲陣列 = cls._拆句做巢狀詞(音)
# 全部型陣列 = cls._拆句做字(型.strip(分詞符號))
# 將型、音分別拆作一个一个詞,順suah將輕聲符提掉、khng3佇敢有輕聲標記()
# 後日 今日 => [[後,日], [今,日]]
# āu--ji̍t => [[āu, ji̍t]]
全部型陣列, 型巢狀輕聲陣列 = cls._拆句做巢狀詞(型)
全部音陣列, 音巢狀輕聲陣列 = cls._拆句做巢狀詞(音)
組物件 = 組()
try:
組物件.內底詞 = cls._對齊型音處理刪節號(全部型陣列, 全部音陣列, 巢狀輕聲陣列)
# 對齊拆開的型、音
組物件.內底詞 = cls._對齊型音處理刪節號(全部型陣列, 全部音陣列, 型巢狀輕聲陣列, 音巢狀輕聲陣列)
except 解析錯誤 as 錯誤:
raise 解析錯誤(錯誤.args[0].format(型, 音))
return 組物件
Expand Down Expand Up @@ -520,51 +526,77 @@ def _拆好陣列對齊詞物件(cls, 型陣列, 音陣列, 輕聲陣列):
return 詞物件

@classmethod
def _對齊型音處理刪節號(cls, 全部型陣列, 全部音陣列, 巢狀輕聲陣列):
def _對齊型音處理刪節號(cls, 型巢狀陣列, 音巢狀陣列, 型輕聲巢狀陣列, 音輕聲巢狀陣列):
# 取得按照詞組成的型音巢狀陣列之後,將型音對齊成詞物件陣列
詞陣列 = []
第幾字 = 0
第幾音 = 0
while 第幾音 < len(全部音陣列):
# 先將型巢狀陣列改成一維陣列
型陣列 = []
型輕聲陣列 = []
for 一型陣列 in 型巢狀陣列:
型陣列 += 一型陣列
for 一型陣列 in 型輕聲巢狀陣列:
型輕聲陣列 += 一型陣列
# 對齊
while 第幾音 < len(音巢狀陣列):
if (
全部型陣列[第幾字:第幾字 + 2] == ['…', '…'] and
全部音陣列[第幾音:第幾音 + 3] == [['.'], ['.'], ['.']]
型陣列[第幾字:第幾字 + 2] == ['…', '…'] and
音巢狀陣列[第幾音:第幾音 + 3] == [['.'], ['.'], ['.']]
):
詞陣列.append(
cls._拆好陣列對齊詞物件(['……'], ['...'], [False])
)
第幾字 += 2
第幾音 += 3
elif (
全部型陣列[第幾字:第幾字 + 2] == ['…', '…'] and
全部音陣列[第幾音:第幾音 + 2] == [['…'], ['…']]
型陣列[第幾字:第幾字 + 2] == ['…', '…'] and
音巢狀陣列[第幾音:第幾音 + 2] == [['…'], ['…']]
):
詞陣列.append(
cls._拆好陣列對齊詞物件(['……'], ['……'], [False])
)
第幾字 += 2
第幾音 += 2
elif (
全部型陣列[第幾字:第幾字 + 3] == ['.', '.', '.'] and
全部音陣列[第幾音:第幾音 + 3] == [['.'], ['.'], ['.']]
型陣列[第幾字:第幾字 + 3] == ['.', '.', '.'] and
音巢狀陣列[第幾音:第幾音 + 3] == [['.'], ['.'], ['.']]
):
詞陣列.append(
cls._拆好陣列對齊詞物件(['...'], ['...'], [False])
)
第幾字 += 3
第幾音 += 3
else:
音詞 = 全部音陣列[第幾音]
輕聲 = 巢狀輕聲陣列[第幾音]
if 第幾字 + len(音詞) > len(全部型陣列):
# 對齊型音 組成詞物件
#
# 取得一个詞的音和型
詞的音 = 音巢狀陣列[第幾音]
音詞長 = len(詞的音)
詞的型 = 型陣列[第幾字:第幾字+音詞長]
型詞長 = len(詞的型)
# 確定該詞的音kah該詞的型長度相kang5
# 如果字數不合 取得的詞的型 = 非預期的全部型陣列
# => 型:[美] 音:[sui2, sui2]
if 音詞長 != 型詞長:
raise 解析錯誤(
'詞組內底的型「{{}}」比音「{{}}」少!配對結果:{}'.format(str(詞陣列))
)
# 取得一个詞的音和型的輕聲符
詞輕聲陣列 = []
音輕聲陣列 = 音輕聲巢狀陣列[第幾音]
詞的型輕聲 = 型輕聲陣列[第幾字:第幾字+音詞長]
for 輕聲索引, 音輕聲 in enumerate(音輕聲陣列):
型輕聲 = 詞的型輕聲[輕聲索引]
詞輕聲陣列.append(音輕聲 or 型輕聲)
詞陣列.append(
cls._拆好陣列對齊詞物件(全部型陣列[第幾字:第幾字 + len(音詞)], 音詞, 輕聲)
cls._拆好陣列對齊詞物件(詞的型, 詞的音, 詞輕聲陣列)
)
第幾字 += len(音詞)
第幾字 += 型詞長
第幾音 += 1
if 第幾字 < len(全部型陣列):
# 確定全部的音都巡過了後,全部的型嘛攏有巡著、無tshun。
# => 型:[美, 麗] 音:[sui2]
if 第幾字 < len(型陣列):
raise 解析錯誤('詞組內底的型「{{}}」比音「{{}}」濟!配對結果:{}'.format(str(詞陣列)))
return 詞陣列

Expand Down
88 changes: 88 additions & 0 deletions 試驗/整合試驗/Test字串物件一致整合試驗.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# -*- coding: utf-8 -*-
from unittest.case import TestCase, skip
from 臺灣言語工具.解析整理.拆文分析器 import 拆文分析器


class 物件轉字串整合試驗(TestCase):
# 原本字串生按怎就照伊原本--的顯示

def tearDown(self):
物件 = 拆文分析器.建立句物件(self.語句)
self.assertEqual(物件.看語句(), self.語句)

def test_全羅(self):
self.語句 = 'Lia̍h suí-ti'

def test_全羅句頭輕聲詞(self):
self.語句 = 'Ah'

def test_全羅句頭輕聲(self):
self.語句 = '--Ah'

def test_全羅句頭無大寫輕聲(self):
self.語句 = '--ah'

def test_全羅濟字輕聲(self):
self.語句 = 'Kín--tshut-lâi'

def test_全羅輕聲後壁接詞(self):
self.語句 = 'Kín--tshut-lâi lia̍h'

def test_全羅輕聲前有空白(self):
self.語句 = 'Kín --tshut-lâi'

def test_全羅連續輕聲(self):
self.語句 = 'Kín --tshut-lâi --lah'

def test_全羅粗坯的輕聲(self):
self.語句 = 'Kin2-0tshut-lai5-0ah'

def test_全漢(self):
self.語句 = '欲 掠豬'

def test_全漢無空白(self):
self.語句 = '欲掠豬'

def test_全漢輕聲(self):
self.語句 = '--啊'

@skip('分析器閣有問題')
def test_全漢濟字輕聲(self):
self.語句 = '緊--出-來'

@skip('分析器閣有問題')
def test_全漢連續輕聲(self):
self.語句 = '緊--出-來--啦'

@skip('分析器閣有問題')
def test_漢字濟字輕聲混合201802p13(self):
# = 緊--出-來,好--無
self.語句 = '想--起-來就ê驚'

@skip('分析器閣有問題')
def test_漢字濟字輕聲混合201802p13無空白(self):
# = 緊--出-來,好--無
self.語句 = '想--起-來就 ê 驚'

@skip('分析器閣有問題')
def test_bongpo_201804p25(self):
self.語句 = '調--來ê兵仔'

@skip('分析器閣有問題')
def test_bongpo_201804p25無空白(self):
self.語句 = '調--來 ê 兵仔'

def test_漢羅(self):
self.語句 = '欲 lia̍h-ti'

def test_漢羅無空白(self):
self.語句 = '欲lia̍h-ti'

def test_漢羅無空白無連字符(self):
self.語句 = '欲lia̍h豬'

def test_半形標點符號(self):
self.語句 = 'ti!'

def test_全形標點符號(self):
self.語句 = 'ti!'
20 changes: 20 additions & 0 deletions 試驗/整合試驗/Test字串物件轉音一致整合試驗.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from unittest.case import TestCase, skip
from 臺灣言語工具.解析整理.拆文分析器 import 拆文分析器
from 臺灣言語工具.音標系統.閩南語.臺灣閩南語羅馬字拼音 import 臺灣閩南語羅馬字拼音


@skip('暫時放棄')
class 字串物件轉音一致整合試驗(TestCase):

def tearDown(self):
物件 = 拆文分析器.建立句物件(self.語句).轉音(臺灣閩南語羅馬字拼音)
self.assertEqual(物件.看語句(), self.答案)

def test_羅馬字(self):
self.語句 = 'kin2--tshut4-lai5'
self.答案 = 'Kín--tshut-lâi'

def test_大寫羅馬字(self):
self.語句 = 'Kin2--tshut4-lai5'
self.答案 = 'Kín--tshut-lâi'
Loading