我对MUC数据集有问题。我想对此执行NER,但此数据集中的所有单词都是大写字母,因此当运行pos_tagger时,它会将所有错误的单词检测为名词。为了解决这个问题,整个文本最初都变成了小写。然而,这种方式带来了另一个问题;如果文本是小写字母,则NER不能正常工作,并且从字面上找不到“人、组织或位置”。因此,保留了整个文本到小写的转换,以便能够成功地pos_tag,然后执行每个单词的手动大写,以将它们提供给NER模块。但另一个问题出现了,这一次NER检测到的一切都是位置。下面是我的代码:
import nltk
from nltk.tokenize import word_tokenize, sent_tokenize
def NER(input_file, output_file):
output = open('{0}_NER.txt'.format(output_file), 'w')
testset = open(input_file).readlines()
for line in testset:
line_clean = line.lower().strip()
tokens = nltk.word_tokenize(line_clean)
poss = nltk.pos_tag(tokens)
mylist = []
for w in poss:
s = list(w)
s1 = s[0].upper()
tmp = (s1, w[1])
mylist.append(tmp)
ner_ = nltk.ne_chunk(mylist)任何帮助都将不胜感激。谢谢。
以下是此数据集的一部分:
圣萨尔瓦多,1990年1月3日-报告文本阿尔斯营指挥部报告说,大约50名不同年龄段的农民在圣米格尔省被法拉本多·马尔蒂民族解放阵线的恐怖分子绑架。据该驻军称,大规模绑架于12月30日发生在SAN LUIS DE LA REINA。来文方补充说,恐怖分子强迫那些被带到未知地点的个人离开他们的住所,想必是为了违背他们的意愿将他们纳入秘密团体。
发布于 2017-07-18 05:34:33
最好的办法是在大小写折叠文本上训练自己的命名实体分类器。nltk book在第6章和第7章中有一个分步教程。为了进行培训,您可以使用CONLL 2003 corpus。
考虑在大小写折叠文本上训练你自己的词性标记器,它可能比你现在使用的nltk词性标记器工作得更好(但请检查)。
发布于 2017-07-19 21:08:34
如果你的任务是NER,为什么你还需要POS标签?据我所知,POS标签并不能真正改善NER结果。我同意Alexis的观点,你需要训练自己的分类器,因为如果没有大小写信息,你就无法访问词形特征。
https://stackoverflow.com/questions/45148907
复制相似问题