python - 多种语言的名称实体识别 (NER)
问题描述
我正在编写一些代码来执行命名实体识别(NER),这对于英文文本来说非常好。但是,我希望能够将 NER 应用于任何语言。为此,我想 1)识别文本的语言,然后 2)将 NER 应用于识别的语言。对于第 2 步,我怀疑 A)将文本翻译成英文,然后应用 NER(英文),或 B)以识别的语言应用 NER。
以下是我到目前为止的代码。我希望 NER 在第一次识别这种语言后,可以为 text2 或任何其他语言工作:
import spacy
from spacy_langdetect import LanguageDetector
from langdetect import DetectorFactory
text = 'In 1793, Alexander Hamilton recruited Webster to move to New York City and become an editor for a Federalist Party newspaper.'
text2 = 'Em 1793, Alexander Hamilton recrutou Webster para se mudar para a cidade de Nova York e se tornar editor de um jornal do Partido Federalista.'
# Step 1: Identify the language of a text
DetectorFactory.seed = 0
nlp = spacy.load('en_core_web_sm')
nlp.add_pipe(LanguageDetector(), name='language_detector', last=True)
doc = nlp(text)
print(doc._.language)
# Step 2: NER
Entities = [(str(x), x.label_) for x in nlp(str(text)).ents]
print(Entities)
有人对这个有经验么?非常感激!
解决方案
Spacy 需要为正确的语言加载正确的模型。
有关可用模型,请参阅https://spacy.io/usage/models。
import spacy
from langdetect import detect
nlp={}
for lang in ["en", "es", "pt", "ru"]: # Fill in the languages you want, hopefully they are supported by spacy.
if lang == "en":
nlp[lang]=spacy.load(lang + '_core_web_lg')
else:
nlp[lang]=spacy.load(lang + '_core_news_lg')
def entites(text):
lang = detect(text)
try:
nlp2 =nlp[lang]
except KeyError:
return Exception(lang + " model is not loaded")
return [(str(x), x.label_) for x in nlp2(str(text)).ents]
然后,您可以同时运行这两个步骤
ents = entites(text)
print(ents)
推荐阅读
- r - 如何在置信区间图中添加质量点
- php - SQL注入过滤器
- kotlin - Kotiln/JS 中不可用的依赖项
- javafx - 如何摆脱时间线播放时短暂显示的文本?
- python - 从 requirements.txt 安装软件包时,Jedi python 没有安装
- php - Composer (PHP) 如何融入 Docker 工作流程?
- ios - Xcode 项目依赖关系图
- sql - 如何使用 Powershell 获取检查 Azure 中数据库的诊断设置
- javascript - React - onChange 处理程序的动态参考
- java - 当 p:poll 停止时传递对话 id 作为参数