备注:文章仅帮助自己学习使用哦,能帮助到有缘分的你更好哦!!!!!!!!!!!!!
算法介绍
例如一个简易词典为:{“我们”,“喜欢”,“我”, “你们”, “苹果”, “水果”, “很”, “果”}
那么当输入的句子为 我们很喜欢苹果,那么分词的结果为【我们/很/喜欢/苹果】
虽然词典中有我,果等单词,但是不满足最大匹配的原则。
此外,还包括反向最大匹配,双向最大匹配,意思类似。
代码展示
1.文件准备/词库准备
train_text = r"XXXXXXXXXXX\train.txt" # 用于生成字典保存所有的单词
test_text = r"XXXXXXXXXXX\test.txt""" # 需要进行匹配的文档
after_fenci = r"XXXXXXXXXXX\result.txt""" # 分词之后的文档
def get_dict(test_file): # 读取文本返回列表
with open(test_file, 'r', encoding='utf-8') as f:
try:
file_content = f.read().split()
finally:
f.close()
chars = list(set(file_content))
return chars
dict = get_dict(train_text) # dict即为我们所得的词库
2.分词操作
def readfile(test_text):
max_length = 5 # 设定最大的匹配长度,在这里,若5个字符没匹配上,就匹配4个字符,以此类推
f = open(test_text, 'r', encoding='utf-8')
h = open(after_fenci, 'w', encoding='utf-8')
lines = f.readlines()
for line in lines:
my_list = []
start_pos = 0
while start_pos < len(line):
#设定判断标志,如果有匹配上,则匹配位右移相应位置,若没有匹配上,则右移一位。
is_match = False
for length in range(max_length, 0, -1):
text = line[start_pos: start_pos + length]
if text in dict:
my_list.append(text)
start_pos += length # 匹配上,则移动匹配的距离,之后直接跳出循环
is_match = True
break
if is_match == False: # 没匹配上,则往右移动一位。
start_pos += 1
print(my_list)
for word in my_list:
if word == '\n': # 这个地方,不知道为什么找不到分词之后的'\n',知道的大佬请留言告诉我
h.write('\n')
else:
h.write(word+" ")
h.close
readfile(test_text)