做网站第一步要学什么,wordpress %link,网页设计师培训教程,wordpress博客备案最近在做一个文本挖掘项目时遇到一个很实际的问题#xff1a;文本里对地铁线路名称的表述很杂乱#xff0c;如何统一。
比如#xff0c;地铁1号线#xff0c;可能表述为1号线、地铁1号线、轨道1号线、轨道交通1号线、1号地铁、一号线、地铁一号线、轨道一号线、轨道交通一…最近在做一个文本挖掘项目时遇到一个很实际的问题文本里对地铁线路名称的表述很杂乱如何统一。
比如地铁1号线可能表述为1号线、地铁1号线、轨道1号线、轨道交通1号线、1号地铁、一号线、地铁一号线、轨道一号线、轨道交通一号线、一号地铁想统一为“地铁1号线”。
前提是要先建立一个地铁线路名称词典把上述可能的线路名表述都纳入用来准确分词。
import jieba # 分词
from fnmatch import fnmatch # 通配符# 定义函数用来统一地铁线路名称格式
# 投入参数是一个已经分好词的列表返回一个处理好的字符串
def unify_line_name(mylist):num_dict {1:一, 2:二, 3:三, 4:四, 5:五, 6:六, 7:七, 8:八, 9:九, \10:十, 11:十一, 12:十二, 13:十三, 14:十四, 15:十五, 16:十六, 17:十七, \18:十八, 19:十九, 20:二十, 21:二十一, 22:二十二, 23:二十三}for i in range(len(mylist)):if fnmatch(mylist[i], *号线) or fnmatch(mylist[i], *号地铁):# 数字必须从大到小倒着遍历否则影响后面in判断# 比如“二十三”二、十、三、二十、十三都包含在字符串内# 所以要倒着遍历先识别匹配最大的数字就不会错了最后别忘了break跳出循环for j in range(len(num_dict),0,-1):if str(j) in mylist[i] or num_dict[j] in mylist[i]:mylist[i] 地铁 str(j) 号线breakreturn .join(mylist)
# 加载自定义的线路名称词典
jieba.load_userdict(mydict_line.csv)
# 原始字符串
mystr 可是地铁四号线车厢太挤了
# 分词
mylist jieba.lcut(mystr, cut_all False)
print(mylist)
# 用函数处理线路名称
mystr_new unify_line_name(mylist)
print(mystr_new)