python - 如何创建新实体并使用它在我的测试数据中查找实体?如何使我的标记化工作?
问题描述
我想创建一个新实体:我们称它为“医学”,然后使用我的语料库对其进行训练。从那里,识别“药物”的所有实体。不知何故我的代码不起作用,有人可以帮助我吗?
import nltk
test= input("Please enter your file name")
test1= input("Please enter your second file name")
with open(test, "r") as file:
new = file.read().splitlines()
with open(test1, "r") as file2:
new1= file2.read().splitlines()
for s in new:
for x in new1:
sample = s.replace('value', x)
sample1 = ''.join(str(v) for v in sample)
print(sample1)
sentences = nltk.sent_tokenize(sample1)
tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences]
tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences]
chunked_sentences = nltk.ne_chunk_sents(tagged_sentences, binary=True)
print(sentences)
def extract_entity_names(t):
entity_names = []
if hasattr(t, 'label') and t.label:
if t.label() == 'NE':
entity_names.append(' '.join([child[0] for child in t]))
else:
for child in t:
entity_names.extend(extract_entity_names(child))
return entity_names
解决方案
如何创建新实体并使用它在我的测试数据中查找实体?
命名实体识别器是概率、神经或线性模型。在您的代码中,
chunked_sentences = nltk.ne_chunk_sents(tagged_sentences, binary=True)
做这个预测。因此,如果您希望它识别新的实体类型,您应该首先在包含新实体类型的注释数据上训练分类器。
不知何故,我的代码不起作用,
正如我之前所说,您没有使用自己的数据训练 NLTK 的模型,所以它不起作用。
如何使我的标记化工作?
Tokenizer 仅提取单词标记,这是在您的代码中通过这一行完成的
tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences]
但是,tokenizer 并不直接预测命名实体。
如果您想使用 NLTK 训练模型来预测自定义命名实体(如医学),请尝试本教程。
从我个人的经验来看,NLTK 可能不适合这个,看看Spacy。
推荐阅读
- r - r - vegan package NMDS 分类环境变量
- java - 如何从匿名内部类更改 side 方法中的变量值?
- jasmine - 是否有一种简单的方法可以检查未定义变量时是否未调用方法?
- javascript - 如何根据输入参数创建可观察的子集?
- asp.net-mvc - Web 部署失败服务器在处理请求时遇到问题
- machine-learning - 如何在 5*4 子图中显示 kdeplot?
- excel - Excel VBA 选择每个其他单元格并将其粘贴到另一个工作表中?
- c - 函数调用结束后数组不会被擦除
- flutter - 如何在点击 FAB 时显示卡片?
- docker - 我如何在 Windows 上构建 docker wildfly 图像