当前位置: 首页 > 知识库问答 >
问题:

用于多种语言的名称实体识别(NER)

杭胜
2023-03-14

我正在编写一些代码来执行命名实体识别(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)

有人有这方面的经验吗?非常感谢!

共有1个答案

娄浩荡
2023-03-14

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)
 类似资料:
  • 我正在尝试使用这个简短的实体识别教程来学习NER。但我无法成功运行代码。我在现场提供了一个入口。这里提到的txt文件。 我收到错误。 请帮帮我。先谢谢你。

  • 我想使用NLP工具从意大利文本中提取名称和数字。 遗憾的是,斯坦福德NLP和Apache OpenNLP都没有为意大利人提供模型。 我能找到一个,或者找到训练数据来制造一个吗?(至少15000句)

  • 我正在进行我目前的毕业项目,名为“土耳其实体识别”。当我使用人名和地点(有时地点可以是不同的语言,例如塔克西姆/伊斯坦布尔的希尔顿酒店)时,识别器应该捕捉到土耳其语单词。我需要在我的数据集中添加“Hotel”,该数据集充满了特定的位置标签,如Hotel、Restaurant或Mall。但说到组织名称标签。我需要找到一个关于乐队、产品、公司名称的好数据集,但我不知道如何找到或收集这个数据集 在斯坦福

  • 我正在尝试使用自定义NE(命名实体)字典在印度训练NER模型以进行分块。我分别引用NLTK和Stanford NER: NLTK 我找到了NEChunkParser能够在自定义语料库上进行训练。然而,文档或源代码注释中没有指定训练语料库的格式。 在哪里可以找到NLTK中NER的自定义语料库指南? 根据这个问题,斯坦福大学NER的FAQ给出了如何训练定制NER模型的方向。 主要问题之一是默认的斯坦福

  • 我是openNlp的新手。我开始训练一个模型(TokenNameFinderTrainer),以识别名称。到目前为止还不错,但现在我想识别组织(例如“Microsoft”)。 我的问题是:opennlp默认识别哪些类型的实体?(如果有的话...) 我看到它可以处理

  • 我正在使用OpenNLP模型进行名称实体识别。 我正在传递句子,我想在其中识别单词。Open NLP需要一个String[]变量,因此我将String拆分为用空格分隔的单词。 我面临着识别日期的问题。例如,如果字符串包含日期:2012年1月7日,我将字符串拆分为单词,“7”、“1”和“2012”将被分隔为3个不同的单词。虽然它们被识别为日期,但这3个不同的标记对我来说没有意义进行进一步处理。我怎么