Saltar al contenido

Python: ¿Cómo determinar el idioma?

Solución:

  1. TextBlob. Requiere paquete NLTK, usa Google.

    from textblob import TextBlob
    b = TextBlob("bonjour")
    b.detect_language()
    

    pip install textblob

  2. Polígloto. Requiere bibliotecas numpy y algunas arcanas, es poco probable que funcione para Windows. (Para Windows, obtenga una versión apropiada de PyICU, Morfessor y PyCLD2 desde aquí, entonces solo pip install downloaded_wheel.whl.) Capaz de detectar textos con mezcla de idiomas.

    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
    

    pip install polyglot

    Para instalar las dependencias, ejecute:
    sudo apt-get install python-numpy libicu-dev

  3. chardet también tiene la función de detectar idiomas si hay bytes de caracteres en el rango (127-255]:

    >>> chardet.detect("Я люблю вкусные пампушки".encode('cp1251'))
    {'encoding': 'windows-1251', 'confidence': 0.9637267119204621, 'language': 'Russian'}
    

    pip install chardet

  4. langdetect Requiere grandes porciones de texto. Utiliza un enfoque no determinista bajo el capó. Eso significa que obtiene resultados diferentes para la misma muestra de texto. Los documentos dicen que debe usar el siguiente código para determinarlo:

    from langdetect import detect, DetectorFactory
    DetectorFactory.seed = 0
    detect('今一はお前さん')
    

    pip install langdetect

  5. guess_language Puede detectar muestras muy cortas usando este corrector ortográfico con diccionarios.

    pip install guess_language-spirit

  6. langid proporciona ambos módulos

    import langid
    langid.classify("This is a test")
    # ('en', -54.41310358047485)
    

    y una herramienta de línea de comandos:

    $ langid < README.md
    

    pip install langid

  7. FastText es un clasificador de texto, se puede utilizar para reconocer 176 idiomas con modelos adecuados para la clasificación de idiomas. Descargue este modelo, luego:

    import fasttext
    model = fasttext.load_model('lid.176.ftz')
    print(model.predict('الشمس تشرق', k=2))  # top 2 matching languages
    
    (('__label__ar', '__label__fa'), array([0.98124713, 0.01265871]))
    

    pip install fasttext

  8. pyCLD3 es un modelo de red neuronal para la identificación de idiomas. Este paquete contiene el código de inferencia y un modelo entrenado.

    import cld3
    cld3.get_language("影響包含對氣候的變化以及自然資源的枯竭程度")
    
    LanguagePrediction(language="zh", probability=0.999969482421875, is_reliable=True, proportion=1.0)
    

    pip install pycld3

¿Ha echado un vistazo a langdetect?

from langdetect import detect

lang = detect("Ein, zwei, drei, vier")

print lang
#output: de

Hay un problema con langdetect cuando se utiliza para la paralelización y falla. Pero spacy_langdetect es un contenedor para eso y puede usarlo para ese propósito. También puede utilizar el siguiente fragmento:

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)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *