12
votes

Comment détecter la langue

Y a-t-il de bons moteurs open source pour détecter quelle langue un texte est peut-être avec une métrique de probabilité? Un que je peux courir localement et ne pas interroger Google ou Bing? J'aimerais détecter la langue pour chaque page dans environ 15 millions de pages de texte OCR'ed.

Tous les documents ne contiennent pas de langues utilisant l'alphabet latin.


0 commentaires

7 Réponses :


5
votes

Vous pouvez sûrement construire votre propre, donné des statistiques à propos de fréquences de lettre , Fréquences DIGRAPHER , etc. de vos langues cible.

puis relâchez-le comme source ouverte. Et voila , vous avez un moteur open source pour détecter la langue du texte!


0 commentaires

2
votes

Je ne pense pas que vous ayez besoin de quelque chose de très sophistiqué - par exemple pour détecter si un document est en anglais, avec un niveau de certitude assez élevé, testez simplement s'il contient les n mots anglais les plus courants - quelque chose comme:

"the a an is to are in on in it"


4 commentaires

À moins que vous vérifiez la plupart de ceux-ci, il y aura un risque de faux positifs ... par exemple "Kan Jag Komma à Och få Lite est jusqu'à min Läsk?" serait signalé comme anglais.


@Gert C'est pourquoi j'ai dit "tout" - bien sûr, vous pourriez également produire un score de pourcentage. Et il y aura toujours de faux positifs, peu importe ce que vous faites.


@Neil Butterworth - Aucun problème. Je comprends ce que tu veux dire. C'est juste que vous devez faire attention, car les langues partagent certains éléments courants. :)


Je ne cherche pas l'anglais en particulier, ma tâche initiale est d'identifier quelle langue européenne, notamment grecque et suédoise



8
votes

Selon ce que vous faites, vous voudrez peut-être consulter la boîte à outils de traitement des langues naturelles Python (NLTK), qui a un appui aux algorithmes d'apprentissage bayésien.

En général, la lettre et les fréquences de mots constitueraient probablement l'évaluation la plus rapide, mais la NLTK (ou un algorithme d'apprentissage bayésien en général) sera probablement utile si vous devez faire n'importe quoi au-delà de l'identification de la langue. Les méthodes bayésiennes seront probablement utiles également si vous découvrez que les deux premières méthodes ont trop de taux d'erreur.


1 commentaires

Merci pour la pointe, cela semble très prometteur. :-) aussi très cool qu'il vient avec beaucoup de corpa de texte, de cette façon je n'aurai pas à s'entraîner tout seul



4
votes

Pour une référence future, le moteur que j'ai fini par utiliser est libtextcat, qui est sous licence BSD, mais semble ne pas être maintenu depuis 2003. Néanmoins, il fait un bon travail et s'intègre facilement à ma boîte à outils


2 commentaires

"Il a été principalement développé pour la supposition de langue, une tâche sur laquelle il est connu de fonctionner avec une précision presque parfaite"


C'est terriblement optimiste. ;-) Avec ~ 1.700.000 pages exécutées, il détecte la langue correctement pendant environ 50%, a plusieurs suggestions dans l'endroit où la langue apparaît à environ 20% de plus, et manque le reste. Pour les misses, j'ai la chance d'avoir d'autres données pour me soutenir :-)



1
votes

Vous pouvez également essayer Gem de Ruby's WhatLangage, c'est gentil et simple et j'ai utilisé pour l'analyse des données Twitter. Départ: http://www.youtube.com/watch? v = lnqz2cqoreo & list = uuj_3fstmoh-g4ybxtvgawkw & index = 0 & Feature = PLCP pour une démonstration rapide


0 commentaires

1
votes

Consultez franc sur github . Il est écrit en JavaScript, vous pouvez donc utiliser dans un navigateur et peut-être aussi dans le nœud.

  • franc soutient plus de langues que toute autre bibliothèque ou Google;
  • Franc est facilement fourchu pour soutenir 335 langues; franc est juste comme
  • rapide comme la compétition.

0 commentaires

3
votes

Essayez CLD2:

INSTALLATION P>

Detections(is_reliable=True, bytes_found=23, details=(Detection(language_name=u'ENGLISH', language_code=u'en', percent=95, score=1675.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0)))
Detections(is_reliable=True, bytes_found=27, details=(Detection(language_name=u'GERMAN', language_code=u'de', percent=96, score=1496.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0)))
Detections(is_reliable=True, bytes_found=38, details=(Detection(language_name=u'FRENCH', language_code=u'fr', percent=97, score=1134.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0)))
Detections(is_reliable=True, bytes_found=48, details=(Detection(language_name=u'ARABIC', language_code=u'ar', percent=97, score=1263.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0)))
Detections(is_reliable=False, bytes_found=29, details=(Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0)))
Detections(is_reliable=True, bytes_found=63, details=(Detection(language_name=u'Japanese', language_code=u'ja', percent=98, score=3848.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0)))
Supports 282 languages.


0 commentaires