Rit*_*ita 61 python string parsing
我想得到这个:
Input text: "???????? ?????"
Output text: "Russian"
Input text: "??"
Output text: "Chinese"
Input text: "????"
Output text: "Japanese"
Input text: "????????????"
Output text: "Arabic"
Run Code Online (Sandbox Code Playgroud)
我怎么能在python中做到这一点?谢谢.
Rab*_*ash 105
TextBlob.需要NLTK包,使用谷歌.
from textblob import TextBlob
b = TextBlob("bonjour")
b.detect_language()
Run Code Online (Sandbox Code Playgroud)pip install textblob
多语言.需要numpy和一些神秘的库,不太可能让它适用于Windows.(对于Windows,从这里获取适当版本的PyICU,Morfessor和PyCLD2,然后就可以了.)能够检测混合语言的文本.pip install downloaded_wheel.whl
from polyglot.detect import Detector
mixed_text = u"""
China (simplified Chinese: ??; traditional Chinese: ??),
officially the People's Republic of China (PRC), is a sovereign state
located in East Asia.
"""
for language in Detector(mixed_text).languages:
print(language)
# name: English code: en confidence: 87.0 read bytes: 1154
# name: Chinese code: zh_Hant confidence: 5.0 read bytes: 1755
# name: un code: un confidence: 0.0 read bytes: 0
Run Code Online (Sandbox Code Playgroud)pip install polyglot
要安装依赖项,请运行:
sudo apt-get install python-numpy libicu-dev
如果范围内有字符字节(127-255),chardet还具有检测语言的功能:
>>> chardet.detect("? ????? ??????? ????????".encode('cp1251'))
{'encoding': 'windows-1251', 'confidence': 0.9637267119204621, 'language': 'Russian'}
Run Code Online (Sandbox Code Playgroud)pip install chardet
langdetect需要大部分文本.它使用非确定性方法.这意味着您可以为同一文本示例获得不同的结果.文档说你必须使用以下代码来确定:
from langdetect import detect, DetectorFactory
DetectorFactory.seed = 0
detect('???????')
Run Code Online (Sandbox Code Playgroud)pip install langdetect
pip install guess_language-spirit
langid提供了两个模块
import langid
langid.classify("This is a test")
# ('en', -54.41310358047485)
Run Code Online (Sandbox Code Playgroud)和命令行工具:
$ langid < README.md
Run Code Online (Sandbox Code Playgroud)
pip install langid
小智 39
你看过langdetect吗?
from langdetect import detect
lang = detect("Ein, zwei, drei, vier")
print lang
#output: de
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找一个快速处理长文本的图书馆,polyglot并且fastext在这里做得最好。
我从脏的和随机的 HTML 集合中抽取了 10000 个文档,结果如下:
+------------+----------+
| Library | Time |
+------------+----------+
| polyglot | 3.67 s |
+------------+----------+
| fasttext | 6.41 |
+------------+----------+
| cld3 | 14 s |
+------------+----------+
| langid | 1min 8s |
+------------+----------+
| langdetect | 2min 53s |
+------------+----------+
| chardet | 4min 36s |
+------------+----------+
Run Code Online (Sandbox Code Playgroud)
我注意到很多方法都专注于短文本,可能是因为这是一个很难解决的问题:如果你有很多文本,那么检测语言真的很容易(例如,一个人可以只使用字典!)。然而,这使得很难找到一种简单且合适的方法来处理长文本。
@Rabash 在/sf/answers/3297476731/上有一个很好的工具列表
@toto_tico 在呈现速度比较方面做得很好。
这是一个简短的摘要,为他们添加了上面的好答案(截至 2021 年)
| 语言识别软件 | 使用人 | 开源/模型 | 基于规则 | 基于统计 | 可以训练/调整 |
|---|---|---|---|---|---|
| 谷歌翻译语言检测 | TextBlob(有限使用) | ? | —— | —— | ? |
| 夏代特 | —— | ? | ? | ? | ? |
| Guess Language(非主动开发) | 精神猜测(更新重写) | ? | ? | 最低限度 | ? |
| pyCLD2 | 多语言 | ? | 有些 | ? | 没有把握 |
| CLD3 | —— | ? | ? | ? | 可能 |
| 懒洋洋的 | —— | ? | 没有把握 | ? | ? |
| 语言检测 | SpaCy-langdetect | ? | ? | ? | ? |
| 快速文本 | 什么郎 | ? | ? | ? | 不确定 |
有有一个问题langdetect,当被用于并行化它,它失败。但它spacy_langdetect是一个包装器,您可以将其用于该目的。您也可以使用以下代码段:
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)
Run Code Online (Sandbox Code Playgroud)
您可以使用Googletrans(非官方)免费且无限制的 Python 谷歌翻译 API。
您可以根据需要提出任意数量的请求,没有限制
安装:
$ pip install googletrans
Run Code Online (Sandbox Code Playgroud)
语言检测:
>>> from googletrans import Translator
>>> t = Translator().detect("hello world!")
>>> t.lang
'en'
>>> t.confidence
0.8225234
Run Code Online (Sandbox Code Playgroud)