11# -*- coding: utf-8 -*-
2- from __future__ import absolute_import ,division ,unicode_literals ,print_function
3- import six
4- if six .PY2 :
5- from builtins import *
2+ from __future__ import absolute_import ,unicode_literals
63'''
74โปรแกรม multi-cut
85ตัดคำภาษาไทยโดยใช้ Maximum Matching algorithm
96เดติดโค้ดต้นฉบับ คุณ Korakot Chaovavanich
107จาก https://www.facebook.com/groups/408004796247683/permalink/431283740586455/
118และ https://gist.github.com/korakot/fe26c65dc9eed467f4497f784a805716
129'''
10+ import six
11+ if six .PY2 :
12+ from builtins import *
1313import re
1414import copy
1515from pythainlp .tools import file_trie
@@ -44,9 +44,7 @@ def multicut(text,data):
4444 ''' ส่งคืน LatticeString คืนมาเป็นก้อนๆ
4545 '''
4646 words_at = defaultdict (list ) # main data structure
47- if data == "" :
48- trie = file_trie (data = "newmm" )
49- else :
47+ if data != "" : # ถ้าหากกำหนดข้อมูลโดยใช้ dict ของตัวเอง
5048 i = 0
5149 data2 = copy .copy (data )
5250 while i < len (data2 ):
@@ -55,6 +53,8 @@ def multicut(text,data):
5553 data2 [i ]+= "#"
5654 i += 1
5755 trie = Trie (data2 )
56+ else :
57+ trie = file_trie (data = "newmm" )
5858 def serialize (p , p2 ): # helper function
5959 for w in words_at [p ]:
6060 p_ = p + len (w )
@@ -99,22 +99,13 @@ def serialize(p, p2): # helper function
9999
100100def mmcut (text ,data = '' ):
101101 res = []
102- text = tcc .tcc (text ,sep = '#' )
103- if (text [len (text )- 1 ]!= '#' ):
104- text += '#'
102+ text = tcc .tcc (text ,sep = '#' ) # ให้นำข้อความมาผ่าน tcc
103+ if (text [len (text )- 1 ]!= '#' ): # ถ้าตัวสุดท้ายของสตริงไม่เป็น #
104+ text += '#' # ให้เพิ่ม # เข้าไป
105105 for w in multicut (text ,data = data ):
106106 mm = min (w .multi , key = lambda x : x .count ('/' ))
107107 res .extend (mm .split ('/' ))
108- listdata = res
109- i = 0
110- num = len (listdata )
111- while i < len (listdata ):
112- if (re .search ('\A[ก-ฮ]#\Z' ,listdata [i ]) and i - 1 >= 0 ):
113- listdata [i - 1 ]+= listdata [i ]
114- listdata [i ]= '#'
115- num -= 1
116- i += 1
117- return [x .replace ('#' ,'' ) for x in res if x != '#' ]
108+ return [x .replace ('#' ,'' ) for x in res if x != '#' ] # เอา # ออก
118109def combine (ww ):
119110 if ww == []:
120111 yield ""
@@ -135,5 +126,5 @@ def listcut(text,data=''):
135126 return list (combine (ww ))
136127if __name__ == "__main__" :
137128 text = 'ผมรักคุณนะครับโอเคบ่พวกเราเป็นคนไทยรักภาษาไทยภาษาบ้านเกิด'
138- print ( mmcut (text ) )
129+ mmcut (text )
139130 #print(listcut(text))
0 commit comments