Как определить язык - PullRequest
12 голосов
/ 04 июля 2010

Есть ли хорошие механизмы с открытым исходным кодом для определения того, на каком языке текст, возможно, с метрикой вероятности?Тот, который я могу запустить локально и не запрашивать Google или Bing?Я хотел бы определить язык для каждой страницы в примерно 15 миллионах страниц текста OCR.

Не все документы будут содержать языки, использующие латинский алфавит.

Ответы [ 7 ]

8 голосов
/ 04 июля 2010

В зависимости от того, что вы делаете, вы можете попробовать Python Natural Language Processing Toolkit (NLTK), который имеет некоторую поддержку байесовских алгоритмов обучения.

В целом, частота букв и слов, вероятно, была бы самой быстрой оценкой, но NLTK (или алгоритм байесовского обучения в целом), вероятно, будет полезен, если вам нужно сделать что-то помимо идентификации языка. Байесовские методы, вероятно, будут также полезны, если вы обнаружите, что первые два метода имеют слишком высокий уровень ошибок.

4 голосов
/ 06 июля 2010

Для дальнейшего использования в качестве движка я выбрал libtextcat, который находится под лицензией BSD, но, похоже, не поддерживается с 2003 года. Тем не менее, он хорошо работает и легко интегрируется в мой набор инструментов

3 голосов
/ 04 июля 2010

Вы, безусловно, можете создать свой собственный, , учитывая некоторую статистику о частотах букв , частотах дифракций и т. Д. Из целевых языков.

Тогда выпустите это как открытый источник. И вуаля , у вас есть движок с открытым исходным кодом для определения языка текста!

2 голосов
/ 13 августа 2017

Попробуйте CLD2:

Установка

sudo -H pip install cld2-cffi

Run

import cld2

res = cld2.detect("This is a sample text.")
print(res)
res = cld2.detect("Dies ist ein Beispieltext.")
print(res)
res = cld2.detect("Je ne peut pas parler cette language.")
print(res)
res = cld2.detect(" هذه هي بعض النصوص العربية")
print(res)
res = cld2.detect("这是一些阿拉伯文字")  # Chinese?
print(res)
res = cld2.detect("これは、いくつかのアラビア語のテキストです")
print(res)
print("Supports {} languages.".format(len(cld2.LANGUAGES)))

Придает

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.

Другие

2 голосов
/ 04 июля 2010

Я не думаю, что вам нужно что-то очень сложное - например, чтобы определить, есть ли документ на английском языке, с довольно высоким уровнем достоверности, просто проверить, содержит ли он N наиболее распространенных английских слов - что-то вроде: *

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

Если он содержит все это, я бы сказал, что это почти наверняка английский.

1 голос
/ 10 февраля 2016

Проверьте Франк на Github .Он написан на JavaScript, поэтому вы можете использовать его в браузере и, возможно, в Node.

  • franc поддерживает больше языков, чем любая другая библиотека, или Google;легко разветвляется для поддержки 335 языков;Фрэнк так же
  • быстр, как и его конкуренты.
1 голос
/ 10 сентября 2012

Вы также можете попробовать гем Ruby WhatLanguage, он красивый и простой, и я использовал его для анализа данных Twitter. Проверьте: http://www.youtube.com/watch?v=lNqZ2cqOReo&list=UUJ_3fstMOH-g4yBxtvgAWkw&index=0&feature=plcp для быстрой демонстрации

...