我最近在一个涉及命名实体识别的项目中工作。 我通过提供自己的训练数据来生成NER模型。 NER的问题在于它遇到完全停止后会停止标记。 例如,如果我有像
这样的文字"约翰在印度工作。他在英特尔公司工作,#34;
NER标记器将为上述文本
提供以下输出"约翰-NAME" "工作-O" "在-O" "印度-PLACE&#34 ;.
它不处理连续的句子
即"他在英特尔公司工作。"
所以基本上它完全停止(。)。
我有什么办法可以在NER中改变这个吗? 可以在属性文件中解决这个问题吗?
数据如下:
" 1.约翰吃香蕉2.他去办公室3.他是团队的队长5.他喜欢蟋蟀6.他喜欢游泳7.他喜欢苹果"
所以在这种情况下我不能使用sentence tokenizer
因为它根据句点(句号)分割句子。
关于NER
的原始问题,标记在句点的第一次出现(完全停止)时中断。
句子标记符将代码
中给出的上述给定文本标记 text = "1.John eats a banana 2. he goes to office 3.he is the captain of the team 5.HE LIKES CRICKET 6. HE GOES SWIMMING 7.he likes apple"
sents = nltk.sent_tokenize(text)
输出看起来像:[' 1.John吃香蕉2.他去办公室3.他是团队的队长5.HI LIKES CRICKET 6。','他喜欢游泳7.他喜欢苹果']
由于文本中没有适当的句点,因此句子标记器无法提取精确的句子。
现在我想将整个文本块提供给NER。我提供的训练数据如下:
This is just a part of entire data
1 O
. O
John PER
eats O
a O
banana O
2 O
. O
he PER
goes O
to O
office O
3 O
. O
he PER
is O
the O
captain O
of O
the O
team O
5 O
. O
HE PER
LIKES O
CRICKET O
现在NER的代码是这样的:
from nltk.tag.stanford import NERTagger
import os
java_path = "/Java/jdk1.8.0_45/bin/java.exe"
os.environ['JAVAHOME'] = java_path
st = NERTagger('../ner-model.ser.gz','../stanford-ner.jar')
tagging = st.tag(text.split())
从上面的代码开始,标记仅在第一个周期(完全停止)出现之前完成。
答案 0 :(得分:0)
通过一次标记一个句子来修复它:
sents = nltk.sent_tokenize(alltext)
for sentence in sents:
# tokenize into words, apply NE recognizer