1、正向最大匹配法
代码文件
def cutA(sentence, dictA):
# sentence:要分词的句子
result = []
sentenceLen = len(sentence)
n = 0
maxDictA = max([len(word) for word in dictA])
while n < sentenceLen:
matched = False
for i in range(maxDictA, 0, -1):
if n + i <= sentenceLen:
word = sentence[n:n + i]
if word in dictA:
result.append(word)
n += i
matched = True
break
if not matched:
result.append(sentence[n])
n += 1
print(result) # 输出分词结果
# 测试用例
if __name__ == "__main__":
dictA = set(["南京市", "长江", "大桥"])
sentences = ["南京市", "南京市长", "长江大桥", "大桥", "南京市长江大桥"]
for sentence in sentences:
cutA(sentence, dictA)
题目描述
任务描述
本关任务:根据本关所学有关中文分词的基础知识,采用规则分词法,完成正向最大匹配算法程序的编写并通过所有测试用例。
相关知识
为了完成本关任务,你需要掌握:
-
中文分词的含义;
-
规则分词各个算法的思想。
中文分词简介
在语言理解中,词是最小的能够独立活动的有意义的语言成分。将词确定下来是理解自然语言的第一步,只有跨越了这一步,中文才能像英文那样过渡到短语划分、概念抽取以及主题分析,以至自然语言理解,最终达到智能计算的最高境界。因此,每个 NLP 工作者都应掌握分词技术。
在汉语中,词以字为基本单位的,但是一篇文章的语义表达却仍然是以词来划分的。因此,在处理中文文本时,需要进行分词处理,将句子转化为词的表示。这个切词处理过程就是中文分词,它通过计算机自动识别出句子的词,在词间加入边界标记符,分隔出各个词汇。整个过程看似简单,然而实践起来却很复杂,最主要的困难就在于分词歧义。
现有的分词算法可分为三大类: