Skip to content

Commit

Permalink
Merge 224fd0e into 6619178
Browse files Browse the repository at this point in the history
  • Loading branch information
Wenli Tsai committed Jul 5, 2018
2 parents 6619178 + 224fd0e commit 0dda200
Show file tree
Hide file tree
Showing 11 changed files with 242 additions and 26 deletions.
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
5 changes: 4 additions & 1 deletion 臺灣言語工具/基本物件/字.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,10 @@ def __str__(self):

def __repr__(self):
return self.__str__()


def 看語句(self):
return self.

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

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


class (功能):
Expand Down Expand Up @@ -37,6 +40,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
35 changes: 34 additions & 1 deletion 臺灣言語工具/基本物件/詞.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,10 +41,41 @@ 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.內底字:
字的型.append(一字.看型(物件分字符號, 物件分詞符號, 物件分句符號))
字的型.append(一字.看語句(物件分字符號, 物件分詞符號, 物件分句符號))
return 物件分字符號.join(字的型)

def 看音(self, 物件分字符號=分字符號, 物件分詞符號=分詞符號, 物件分句符號=分詞符號):
Expand Down
7 changes: 7 additions & 0 deletions 臺灣言語工具/基本物件/集.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,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:
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!'
19 changes: 19 additions & 0 deletions 試驗/整合試驗/Test字串物件轉音一致整合試驗.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from unittest.case import TestCase
from 臺灣言語工具.解析整理.拆文分析器 import 拆文分析器
from 臺灣言語工具.音標系統.閩南語.臺灣閩南語羅馬字拼音 import 臺灣閩南語羅馬字拼音


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

0 comments on commit 0dda200

Please sign in to comment.