首页 > 解决方案 > 有没有办法在python中检测和区分英语和罗马乌尔都语?

问题描述

基本上我有一个 RomanUrduDataSet (乌尔都语是在英语字母的帮助下编写的,例如 Sahi-right),其中还包括一些英语单词。而且我必须检测包含多少英语单词以及它们是什么。换句话说,想要区分两种语言,即英语和罗马乌尔都语都使用相同的字母集。例如“总理瓦泽尔-阿扎姆”

我在 colab 中使用 python 尝试了 spacy 和 spacy_langdetect 包,它适用于所有其他语言,但不幸的是包括罗马乌尔都语单词作为英语单词。例如文本“这是英文文本 sai kaha”,其中“sai kaha”(说得好)属于罗马乌尔都语,但我下面的代码将其包含为英语单词。

import spacy
from spacy_langdetect import LanguageDetector

nlp = spacy.load("en")
nlp.add_pipe(LanguageDetector(), name="language_detector", last=True)
text = "This is English text Er lebt mit seinen Eltern und seiner Schwester in Berlin. Yo me divierto todos los días en el parque. Je m'appelle Angélica Summer, j'ai 12 ans et je suis canadienne."
doc = nlp(text)
# document level language detection. Think of it like average language of document!
print(doc._.language['language'])
# sentence level language detection
for i, sent in enumerate(doc.sents):
    print(sent, sent._.language)

输出:
这是英文文本 sai kaha {'language': 'en', 'score': 0.9999982400559537} Er lebt mit seinen Eltern und seiner Schwester 在柏林。{'language': 'de', 'score': 0.9999979601967207} Yo me divierto todos los días en el parque。{'language': 'es', 'score': 0.9999976130316337} Je m'appelle Angélica Summer, j'ai 12 ans et je suis canadienne。{'语言':'fr','分数':0.9999962796815557}

但我想要的结果是:

这个英文文本 {'language': 'en', 'score':
sai kaha {'language': 'roman-urdu', 'score':

标签: pythonnlpgoogle-colaboratorylanguage-detection

解决方案


你可以让 SpaCy 通过 n-gram 识别语言(在这种情况下三元组可以工作)和自定义Sentencizer


推荐阅读