将名字和姓氏标记为一个单词

时间:2018-01-30 03:38:44

标签: python named-entity-recognition spacy

  
    

输入:巴拉克奥巴马是总统

         

(欲望)输出:谁是总统?

  
问题是虽然SpaCy认为巴拉克奥巴马是一个人,但是在早期阶段对巴拉克奥巴马进行说明时,巴拉克奥巴马已被分成两个词,即:"巴拉克"和#34;奥巴马"

附件是我的示例代码:

import spacy
from nltk import word_tokenize


nlp = spacy.load('en_core_web_sm')
text = 'Barack Obama is the President'
BreakText = word_tokenize(text)
document = nlp(text)

person = []
for ent in document.ents:
    if ent.label_ == 'PERSON':
        person.append(ent)

k = person[0]
j = BreakText.index(str(k))
BreakText[j] = 'Who'
Final = " ".join(BreakText)
print(Final + "?")

还是有另一种方法来获得我的欲望输出吗?

  
    

更新:这有效!

  
k = person[0]
o = text.replace(str(k), 'Who')
print(o + "?")

2 个答案:

答案 0 :(得分:0)

您正在描述命名实体识别(NER),而不是标记化。

nltk文档中的第7章描述了NER如何从标记化,部分语音标记到实体识别向前迈出几步。

http://www.nltk.org/book/ch07.html

nltk.ne_chunk()

很可能是您感兴趣的功能。

答案 1 :(得分:0)

Spacy会使用ent.text给您实体的全文。