【问题标题】:Tokenizing First Name and Last Name as one word将名字和姓氏标记为一个词
【发布时间】:2018-01-30 03:38:43
【问题描述】:

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

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

问题是SpaCy虽然将巴拉克奥巴马识别为一个人,但在前期对文字进行分词时,巴拉克奥巴马已经被分成了两个词,即:“Barack”和“Obama”

附上我的示例代码:

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 + "?")

【问题讨论】:

  • Barak 和 Obama 是两个不同的词,所以也许用词来标记不是你想要的?看起来这会让你的令牌成为短语。

标签: python named-entity-recognition spacy


【解决方案1】:

Spacy 将为您提供带有ent.text 的实体的全文。

【讨论】:

    【解决方案2】:

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

    nltk 文档中的第 7 章描述了 NER 如何从标记化、词性标记到实体识别向前迈出几步。

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

    nltk.ne_chunk()
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      相关资源
      最近更新 更多