3.4.2构建词网
def generate_wordnet(sent, trie):
"""
生成词网
:param sent: 句子
:param trie: 词典(unigram)
:return: 词网
"""
searcher = trie.getSearcher(JString(sent), 0)
wordnet = WordNet(sent)
while searcher.next():
wordnet.add(searcher.begin + 1,
Vertex(sent[searcher.begin:searcher.begin + searcher.length], searcher.value, searcher.index))
# 原子分词,保证图连通
vertexes = wordnet.getVertexes()
i = 0
while i < len(vertexes):
if len(vertexes[i]) == 0: # 空白行
j = i + 1
for j in range(i + 1, len(vertexes) - 1): # 寻找第一个非空行 j
if len(vertexes[j]):
break
wordnet.add(i, Vertex.newPunctuationInstance(sent[i - 1: j - 1])) # 填充[i, j)之间的空白行
i = j
else:
i += len(vertexes[i][-1].realWord)
return wordnet
作者大大,3.4.2构建词网使用的原子分词那里,为什么在遇到非空行时只处理最后一个单词(比如【和,和服】只处理和服而不关心和),这样不会导致部分路径无法到达终点吗?真心求问