近日一项进行的工作中,需要判断一段文本中的实体名词。在操作过程中,发现网上没有对相同词性的词语进行合并的方法,比如我要将一句话中同为名词的词语给合并出来。
如,原句为“经刑侦总队核实,冻结原因涉及通州分局永顺派出所案件,非本人使用”
经分词的结果为“经 刑侦 总队 核实 , 冻结 原因 涉及 通州 分局 永顺 派出所 案件 ,非 本人 使用”
我想要的结果是将名词合并,即“经 刑侦总队 核实 , 冻结 原因 涉及 通州分局永顺派出所案件 ,非 本人 使用”
合并两个词语成为一个词语,在分词方法中可以建立词典,但是当面临大量的文本语料中是没有方法快速的建立所有名词组合的词典的,故放弃该方法
本人使用的分词方法为北大的pkuseg,需合并的词性为n-名词与j-简称,代码为:
import pkuseg
cixing = ['n','j']
seg1 = pkuseg.pkuseg(postag=True)
fenci_sentence = seg1.cut('经刑侦总队核实,冻结原因涉及通州分局永顺派出所案件,非本人使用')
Noun_aggregation = []
sum_noun = 0
sum_no_noun = 0
for i in range(0, len(fenci_sentence)):
if i == 0:
if any(e in fenci_sentence[0][1] for e in cixing) == True:
sum_noun += 1
Noun_aggregation.append(fenci_sentence[0][0])
else:
sum_no_noun += 1
Noun_aggregation.append(fenci_sentence[0][0])
else:
if any(e in fenci_sentence[i][1] for e in cixing) != True:
sum_no_noun +=1
Noun_aggregation.append(fenci_sentence[i][0])
elif any(e in fenci_sentence[i-1][1] for e in cixing) != True and any(e in fenci_sentence[i][1] for e in cixing) == True:
sum_noun += 1
Noun_aggregation.append(fenci_sentence[i][0])
else:
Noun_aggregation[sum_noun + sum_no_noun - 1] = Noun_aggregation[sum_noun + sum_no_noun - 1] + fenci_sentence[i][0]
print(" ".join(Noun_aggregation))
输出结果为"经 刑侦总队 核实 , 冻结 原因 涉及 通州分局永顺派出所案件 , 非 本人 使用"
本人认为这种方法非常低效,这么多的判断条件o(╥﹏╥)o,肯定是不能大量应用的,自己之前数据结构的知识不是学的很好,这应该是属于遍历吧,但我没想到应该怎么用,所以也希望能够有网上的朋友分享下经验,优化上述的代码,非常非常感谢