python - 提供您自己的自定义标签来标记 nltk 中的数据?

标签 python nlp nltk spacy pos-tagger

运行以下代码时

from nltk import word_tokenize, pos_tag, ne_chunk


sentence = "Antacids is given to Jhon,Sodium Bicarbonate is given to Carl,Folic Acid to Jeery  all works at Google " 
print(ne_chunk(pos_tag(word_tokenize(sentence))))

我得到这个输出

(S
  (GPE Antacids/NNP)
  is/VBZ
  given/VBN
  to/TO
  (PERSON Jhon/NNP)
  ,/,
  (PERSON Sodium/NNP Bicarbonate/NNP)
  is/VBZ
  given/VBN
  to/TO
  (GPE Carl/NNP)
  ,/,
  (PERSON Folic/NNP Acid/NNP)
  to/TO
  (GPE Jeery/NNP)
  all/DT
  works/NNS
  at/IN
  (ORGANIZATION Google/NNP))

我想将药物(如抗酸剂、钠、叶酸)分配到同一类别。

我可以使用哪个库来实现此目的?

最佳答案

您想在文本中保留一些拼写错误吗?例如JhonJohnJeeryJerry,普通名词大写(碳酸氢钠 会是小写的碳酸氢钠..)?

Python 库中的嵌入式 NER(命名实体识别)是使用干净文本进行训练的,因为文本拼写错误,因此使用通用 NER 很难达到 100% 的准确率。

使用正确的句子和 spacy 库,您可以获得正确的输出:

import spacy

nlp = spacy.load('en')
doc = nlp("Antacids is given to John, sodium bicarbonate is given to Carl, folic acid to Jerry all works at Google")

for token in doc:
    print('token.i: {2}\ttoken.idx: {0}\ttoken.pos: {3:10}token.text: {1}'.
          format(token.idx, token.text, token.i, token.pos_)

print('Entities', [(e.text, e.label_) for e in doc.ents])

结果(抗酸剂、碳酸氢钠和酸被标记为名词):

token.i: 0  token.idx: 0    token.pos: NOUN      token.text: Antacids
token.i: 1  token.idx: 9    token.pos: VERB      token.text: is
token.i: 2  token.idx: 12   token.pos: VERB      token.text: given
token.i: 3  token.idx: 18   token.pos: ADP       token.text: to
token.i: 4  token.idx: 21   token.pos: PROPN     token.text: John
token.i: 5  token.idx: 25   token.pos: PUNCT     token.text: ,
token.i: 6  token.idx: 27   token.pos: NOUN      token.text: sodium
token.i: 7  token.idx: 34   token.pos: NOUN      token.text: bicarbonate
token.i: 8  token.idx: 46   token.pos: VERB      token.text: is
token.i: 9  token.idx: 49   token.pos: VERB      token.text: given
token.i: 10 token.idx: 55   token.pos: ADP       token.text: to
token.i: 11 token.idx: 58   token.pos: PROPN     token.text: Carl
token.i: 12 token.idx: 62   token.pos: PUNCT     token.text: ,
token.i: 13 token.idx: 64   token.pos: ADJ       token.text: folic
token.i: 14 token.idx: 70   token.pos: NOUN      token.text: acid
token.i: 15 token.idx: 75   token.pos: ADP       token.text: to
token.i: 16 token.idx: 78   token.pos: PROPN     token.text: Jerry
token.i: 17 token.idx: 84   token.pos: DET       token.text: all
token.i: 18 token.idx: 88   token.pos: VERB      token.text: works
token.i: 19 token.idx: 94   token.pos: ADP       token.text: at
token.i: 20 token.idx: 97   token.pos: PROPN     token.text: Google

并且实体已正确标记:

Entities [('John', 'PERSON'), ('Carl', 'PERSON'), ('Jerry', 'PERSON'), ('Google', 'ORG')]

关于python - 提供您自己的自定义标签来标记 nltk 中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49921552/

相关文章:

python - TensorFlow:在不同输出形状的数据集之间交替

Python 等同于 Jstack?

python - Django注册 View 如何从用户表单获取用户以将配置文件分配给用户

python - 将索引缩减为 "interesting"个词以供将来搜索词使用

python - 没有名为 'nltk' 的模块

python - 通过 crontab 执行 Python 脚本

java - Java 中的 NP、VP 和 PP 短语分块 (CoreNLP)

python - Python 中的阿拉伯语 Wordnet 同义词?

python - 如何使用 Python NLTK 仅打印出 Wo​​rdNet 同义词集中的单词本身?

nltk - 使用 nltk 将日期识别为命名实体?