Skip to content

Example 1:將長句處理成短句再運用 monpa 完成分詞

Wen-Chao Yeh edited this page Aug 1, 2019 · 3 revisions

說明文件有建議先將長文切割成短句再送入 monpa 切詞,這裏略舉一例予有需要的開發者參考。

『城市就是子宮,它們確實是。一個人該先做什麼才能成為真正的人?他必須被生下來,離開子宮,而且離開之後,他就不能再回子宮裡了。貝萊已經離開過城市,他不能再回去了。這裡已不再是她的城市,鋼穴成了異鄉,這是必然結果,其它人也會面臨相同情形,而地球將會重生,開始往外太空發展。』Isaac Asimov, Naked Sun, page 287.

sentence = "城市就是子宮,它們確實是。一個人該先做什麼才能成為真正的人?他必須被生下來,離開子宮,而且離開之後,他就不能再回子宮裡了。貝萊已經離開過城市,他不能再回去了。這裡已不再是她的城市,鋼穴成了異鄉,這是必然結果,其它人也會面臨相同情形,而地球將會重生,開始往外太空發展。"
result = monpa.cut(sentence)
print(result)

如上,直接將此句使用 monpa 的 cut function 斷詞,將會丟失最後『太空發展』這幾個詞。

['城市', '就', '是', '子宮', ',', '它們', '確實', '是', '。', '一', '個', '人', '該', '先', '做', '什麼', '才', '能', '成為', '真正', '的', '人', '?', '他', '必須', '被', '生下來', ',', '離開', '子宮', ',', '而且', '離開', '之後', ',', '他', '就', '不能', '再', '回', '子宮', '裡', '了', '。', '貝萊', '已經', '離開', '過', '城市', ',', '他', '不能', '再', '回', '去', '了', '。', '這', '裡', '已', '不再', '是', '她', '的', '城市', ',', '鋼穴', '成', '了', '異鄉', ',', '這', '是', '必然', '結果', ',', '其它', '人', '也', '會', '面臨', '相同', '情形', ',', '而', '地球', '將', '會', '重生', ',', '開始', '往', '外']

所以,建議事先依您的需求將長文以『,』或是『。』做分隔切成數個短句再依序使用 monpa 得到短句的切詞,最後整合成長句的分詞。譬如,將上面例子以『,』切分就可以得到完整分詞結果:

sentence = "城市就是子宮,它們確實是。一個人該先做什麼才能成為真正的人?他必須被生下來,離開子宮,而且離開之後,他就不能再回子宮裡了。貝萊已經離開過城市,他不能再回去了。這裡已不再是她的城市,鋼穴成了異鄉,這是必然結果,其它人也會面臨相同情形,而地球將會重生,開始往外太空發展。"
seg = []
for item in sentence.split(","):
  if item != "\n": seg.extend(monpa.cut(str(item+",")))
print(seg[:-1])

輸出

['城市', '就', '是', '子宮', ',', '它們', '確實', '是', '。', '一', '個', '人', '該', '先', '做', '什麼', '才', '能', '成為', '真正', '的', '人', '?', '他', '必須', '被', '生下來', ',', '離開', '子宮', ',', '而且', '離開', '之後', ',', '他', '就', '不能', '再', '回', '子宮', '裡', '了', '。', '貝萊', '已經', '離開', '過', '城市', ',', '他', '不能', '再', '回去', '了', '。', '這裡', '已', '不再', '是', '她', '的', '城市', ',', '鋼穴', '成', '了', '異鄉', ',', '這', '是', '必然', '結果', ',', '其它', '人', '也', '會', '面臨', '相同', '情形', ',', '而', '地球', '將', '會', '重生', ',', '開始', '往', '外太空', '發展', '。']

也可以寫成小功能,再呼叫使用即可。譬如:

def LongCut(long_sentence, split_char):
  seg = []
  for item in long_sentence.split(split_char):
    if item != "\n": seg.extend(monpa.cut(str(item+split_char)))
  return seg[:-1]

def LongPseg(long_sentence, split_char):
  seg = []
  for item in long_sentence.split(split_char):
    if item != "\n": seg.extend(monpa.pseg(item+split_char))
  return seg[:-1]

若要有 POS 資訊,則使用LongPseg小功能,

result = LongPseg(sentence, ",")
print(result)

輸出

[['城市', 'Na'], ['就', 'D'], ['是', 'SHI'], ['子宮', 'Na'], [',', 'COMMACATEGORY'], ['它們', 'Nh'], ['確實', 'D'], ['是', 'SHI'], ['。', 'PERIODCATEGORY'], ['一', 'Neu'], ['個', 'Nf'], ['人', 'Na'], ['該', 'D'], ['先', 'D'], ['做', 'VC'], ['什麼', 'Nep'], ['才', 'Da'], ['能', 'D'], ['成為', 'VG'], ['真正', 'A'], ['的', 'DE'], ['人', 'Na'], ['?', 'QUESTIONCATEGORY'], ['他', 'Nh'], ['必須', 'D'], ['被', 'P'], ['生下來', 'VB'], [',', 'COMMACATEGORY'], ['離開', 'VC'], ['子宮', 'Na'], [',', 'COMMACATEGORY'], ['而且', 'Cbb'], ['離開', 'VC'], ['之後', 'Ng'], [',', 'COMMACATEGORY'], ['他', 'Nh'], ['就', 'D'], ['不能', 'D'], ['再', 'D'], ['回', 'VCL'], ['子宮', 'Nc'], ['裡', 'Ncd'], ['了', 'T'], ['。', 'PERIODCATEGORY'], ['貝萊', 'PER'], ['已經', 'D'], ['離開', 'VC'], ['過', 'Di'], ['城市', 'Na'], [',', 'COMMACATEGORY'], ['他', 'Nh'], ['不能', 'D'], ['再', 'D'], ['回去', 'VA'], ['了', 'Di'], ['。', 'PERIODCATEGORY'], ['這裡', 'Ncd'], ['已', 'D'], ['不再', 'D'], ['是', 'SHI'], ['她', 'Nh'], ['的', 'DE'], ['城市', 'Na'], [',', 'COMMACATEGORY'], ['鋼穴', 'Na'], ['成', 'VG'], ['了', 'Di'], ['異鄉', 'Nc'], [',', 'COMMACATEGORY'], ['這', 'Nep'], ['是', 'SHI'], ['必然', 'Na'], ['結果', 'Na'], [',', 'COMMACATEGORY'], ['其它', 'Neqa'], ['人', 'Na'], ['也', 'D'], ['會', 'D'], ['面臨', 'VK'], ['相同', 'VH'], ['情形', 'Na'], [',', 'COMMACATEGORY'], ['而', 'Cbb'], ['地球', 'Na'], ['將', 'D'], ['會', 'D'], ['重生', 'VH'], [',', 'COMMACATEGORY'], ['開始', 'VL'], ['往', 'P'], ['外太空', 'Nc'], ['發展', 'Nv'], ['。', 'PERIODCATEGORY']]
Clone this wiki locally