当有一个潜在的NE后面跟着一个逗号时会发生这种情况,例如,如果我的字符串类似,
这些名字是Praveen Kumar,David Harrison,Paul Harrison,诸如此类
或
“美国加州”
我的输出分别如下。
[(U‘’These,u'O'),(u‘’names,u'O'),(u‘’Praveen ',u'O'),(u‘’Kumar,',',u'O'),(u‘’David‘,u’‘PERSON’),(u‘’Harrison‘,’u'O'),(u‘’Paul‘,u’‘PERSON’),(u‘’Harrison,‘u’u'O'),(u‘’blah‘,u'O')]
或
[(U‘’California,',u'O'),(u‘’United‘,u’‘LOCATION’),(u‘’States‘,U’‘LOCATION’)]
为什么它不认识像"Praveen Kumar“、"Harrison”和"California“这样的潜在国家呢?
下面是如何在代码中使用它:
from nltk.tag.stanford import NERTagger
st = NERTagger('stanford-ner/classifiers/english.all.3class.distsim.crf.ser.gz', 'stanford-ner/stanford-ner.jar')
tags = st.tag("California, United States".split())是因为我用split()标记输入吗?当在Java中尝试时,我如何解决这个问题呢?
发布于 2015-11-09 10:30:50
由于您是通过nltk执行此操作的,因此可以使用它的标记器来拆分输入:
alltext = myfile.read()
tokenized_text = nltk.word_tokenize(alltext)编辑:按照另一个答案的建议,使用斯坦福工具包自己的标记器可能会更好。因此,如果要将令牌提供给斯坦福工具之一,就可以像这样标记文本,以得到工具所期望的标记化:
from nltk.tokenize.stanford import StanfordTokenizer
tokenize = StanfordTokenizer().tokenize
alltext = myfile.read()
tokenized_text = tokenize(alltext)要使用这种方法,您需要安装斯坦福工具,并且nltk必须能够找到它们。我想你已经处理好了,因为你使用的是斯坦福大学的工具。
发布于 2015-11-09 10:09:11
逗号需要是单独的标记。仅仅使用split()并不能实现这一点,因此NER没有识别像"California“这样的令牌。
如果您想获得类似于在Java中使用斯坦福CoreNLP的行为,我建议使用nltk包装器进行标记化:modules/nltk/tokenize/stanford.html
https://stackoverflow.com/questions/33603534
复制相似问题