当文本中有句号时,斯坦福命名的实体识别标记会中断吗?

时间:2015-11-19 11:11:55

标签: python nltk stanford-nlp named-entity-recognition

我最近在一个涉及命名实体识别的项目中工作。 我通过提供自己的训练数据来生成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())   

从上面的代码开始,标记仅在第一个周期(完全停止)出现之前完成。

1 个答案:

答案 0 :(得分:0)

通过一次标记一个句子来修复它:

sents = nltk.sent_tokenize(alltext)
for sentence in sents:
    # tokenize into words, apply NE recognizer