Fast-LangDetectは、Facebookが開発したライブラリであるFastTextに基づいて、超高速で非常に正確な言語検出を提供します。このパッケージは、従来の方法よりも80倍高速で、95%の精度を提供します。
Pythonバージョン3.9から3.12をサポートしています。
オフラインの使用をサポートします。
このプロジェクトは、パッケージングの拡張機能を備えたZafercavdar/fastText-Langdetectに基づいています。
基礎となるFastTextモデルの詳細については、公式ドキュメント:FastText言語識別を参照してください。
注記
このライブラリには、低メモリモードで使用するには、200MBを超えるメモリが必要です。
Fast-LangDetectをインストールするには、 pipまたはpdmを使用できます。
pip install fast-langdetectpdm add fast-langdetect言語検出の最適なパフォーマンスと精度のために、 detect(text, low_memory=False)を使用して、より大きなモデルをロードします。
モデルは、最初の使用時に
/tmp/fasttext-langdetectディレクトリにダウンロードされます。
注記
この関数には、単一のテキストが与えられていると想定されています。テキストを渡す前に、 n文字を削除する必要があります。サンプルが長すぎたり短すぎたりすると、精度が低下します(たとえば、短すぎる場合、中国人は日本人として予測されます)。
from fast_langdetect import detect , detect_multilingual
# Single language detection
print ( detect ( "Hello, world!" ))
# Output: {'lang': 'en', 'score': 0.12450417876243591}
# `use_strict_mode` determines whether the model loading process should enforce strict conditions before using fallback options.
# If `use_strict_mode` is set to True, we will load only the selected model, not the fallback model.
print ( detect ( "Hello, world!" , low_memory = False , use_strict_mode = True ))
# How to deal with multiline text
multiline_text = """
Hello, world!
This is a multiline text.
But we need remove ` n ` characters or it will raise an ValueError.
"""
multiline_text = multiline_text . replace ( " n " , "" ) # NOTE:ITS IMPORTANT TO REMOVE n CHARACTERS
print ( detect ( multiline_text ))
# Output: {'lang': 'en', 'score': 0.8509423136711121}
print ( detect ( "Привет, мир!" )[ "lang" ])
# Output: ru
# Multi-language detection
print ( detect_multilingual ( "Hello, world!你好世界!Привет, мир!" ))
# Output: [{'lang': 'ja', 'score': 0.32009604573249817}, {'lang': 'uk', 'score': 0.27781224250793457}, {'lang': 'zh', 'score': 0.17542070150375366}, {'lang': 'sr', 'score': 0.08751443773508072}, {'lang': 'bg', 'score': 0.05222449079155922}]
# Multi-language detection with low memory mode disabled
print ( detect_multilingual ( "Hello, world!你好世界!Привет, мир!" , low_memory = False ))
# Output: [{'lang': 'ru', 'score': 0.39008623361587524}, {'lang': 'zh', 'score': 0.18235979974269867}, {'lang': 'ja', 'score': 0.08473210036754608}, {'lang': 'sr', 'score': 0.057975586503744125}, {'lang': 'en', 'score': 0.05422825738787651}]detect_language関数 from fast_langdetect import detect_language
# Single language detection
print ( detect_language ( "Hello, world!" ))
# Output: EN
print ( detect_language ( "Привет, мир!" ))
# Output: RU
print ( detect_language ( "你好,世界!" ))
# Output: ZH言語に基づいたテキスト分割については、Split-Langリポジトリを参照してください。
詳細なベンチマーク結果については、Zafercavdar/fastText-Langdetect#ベンチマークを参照してください。
[1] A. Joulin、E。Grave、P。Bojanowski、T。Mikolov、効率的なテキスト分類のためのトリックの袋
@article { joulin2016bag ,
title = { Bag of Tricks for Efficient Text Classification } ,
author = { Joulin, Armand and Grave, Edouard and Bojanowski, Piotr and Mikolov, Tomas } ,
journal = { arXiv preprint arXiv:1607.01759 } ,
year = { 2016 }
}[2] A. Joulin、E。Grave、P。Bojanowski、M。Douze、H。Jégou、T。Mikolov、FastText.Zip:テキスト分類モデルの圧縮
@article { joulin2016fasttext ,
title = { FastText.zip: Compressing text classification models } ,
author = { Joulin, Armand and Grave, Edouard and Bojanowski, Piotr and Douze, Matthijs and J{'e}gou, H{'e}rve and Mikolov, Tomas } ,
journal = { arXiv preprint arXiv:1612.03651 } ,
year = { 2016 }
}