it-swarm.com.de

Stellen Sie fest, ob der Text in Englisch ist.

Ich verwende beide Nltk und Scikit Learn , um Textverarbeitung auszuführen. In meiner Liste der Dokumente habe ich jedoch einige Dokumente, die nicht in englischer Sprache verfasst sind. Zum Beispiel könnte Folgendes zutreffen:

[ "this is some text written in English", 
  "this is some more text written in English", 
  "Ce n'est pas en anglais" ] 

Für meine Analyse möchte ich, dass alle Sätze, die nicht auf Englisch sind, als Teil der Vorverarbeitung entfernt werden. Gibt es dafür einen guten Weg? Ich habe gegoogelt, kann aber nichts Bestimmtes finden, durch das ich erkennen kann, ob Strings in Englisch sind oder nicht. Ist dies etwas, das in Nltk oder Scikit learn nicht als Funktionalität angeboten wird? BEARBEITEN Ich habe Fragen wie this und this gesehen, aber beide sind für einzelne Wörter gedacht ... Kein "Dokument". Müsste ich jedes Wort in einem Satz durchlaufen, um zu prüfen, ob der ganze Satz auf Englisch ist?

Ich verwende Python, also wären Bibliotheken in Python vorzuziehen, aber ich kann bei Bedarf die Sprache wechseln. Ich dachte nur, dass Python das Beste wäre.

7
ocean800

Es gibt eine Bibliothek namens Langdetect. Es wird von der hier verfügbaren Spracherkennung von Google portiert:

https://pypi.python.org/pypi/langdetect

Es unterstützt 55 Sprachen aus der Box.

5
salehinejad

Sie könnten an meinem Artikel interessiert sein Das WiLI-Benchmark-Dataset für die geschriebene Spracherkennung . Ich habe auch ein paar Tools getestet.

TL; DR:

  • CLD-2 ist ziemlich gut und extrem schnell
  • lang-detect ist ein bisschen besser, aber viel langsamer
  • langid ist gut, aber CLD-2 und lang-detect sind viel besser
  • NLTKs Textcat ist weder effizient noch effektiv.

Sie können lidtk installieren und Sprachen klassifizieren:

$ lidtk cld2 predict --text "this is some text written in English"
eng
$ lidtk cld2 predict --text "this is some more text written in English"
eng
$ lidtk cld2 predict --text "Ce n'est pas en anglais"                  
fra
2
Martin Thoma

Dies ist, was ich vor einiger Zeit verwendet habe. Es funktioniert für Texte mit mehr als 3 Wörtern und mit weniger als 3 nicht erkannten Wörtern. Natürlich können Sie mit den Einstellungen spielen, aber für meinen Anwendungsfall (Website-Scrapping) haben diese ziemlich gut funktioniert.

from enchant.checker import SpellChecker

max_error_count = 4
min_text_length = 3

def is_in_english(quote):
  d = SpellChecker("en_US")
  d.set_text(quote)
  errors = [err.Word for err in d]
  return False if ((len(errors) > max_error_count) or len(quote.split()) < min_text_length) else True

print(is_in_english('“办理美国加州州立大学圣贝纳迪诺分校高仿成绩单Q/V2166384296加州州立大学圣贝纳迪诺分校学历学位认证'))
print(is_in_english('“Two things are infinite: the universe and human stupidity; and I\'m not sure about the universe.”'))

> False
> True
1
grizmin

Benutze die Zauberbibliothek

import enchant

dictionary = enchant.Dict("en_US") #also available are en_GB, fr_FR, etc

dictionary.check("Hello") # prints True
dictionary.check("Helo") #prints False

Dieses Beispiel stammt direkt von ihrer Website

1
lordingtar

Wenn Sie etwas Leichtes wollen, sind Brief-Trigramme ein beliebter Ansatz. Jede Sprache hat ein anderes "Profil" von gewöhnlichen und ungewöhnlichen Trigrammen. Sie können dafür googeln oder Ihren eigenen Code schreiben. Hier ist eine Beispielimplementierung, die ich gefunden habe und die "Cosinusähnlichkeit" als Abstandsmaß zwischen dem Beispieltext und den Referenzdaten verwendet: 

http://code.activestate.com/recipes/326576-language-detection-using-character-trigrams/

Wenn Sie die gebräuchlichen nicht-englischen Sprachen in Ihrem Korpus kennen, können Sie dies ganz einfach in einen Ja/Nein-Test umwandeln. Wenn nicht, müssen Sie Sätze aus Sprachen vorhersehen, für die Sie keine Trigrammstatistiken haben. Ich würde einige Tests durchführen, um den normalen Bereich der Ähnlichkeitswerte für Einzelsatztexte in Ihren Dokumenten zu sehen, und einen geeigneten Schwellenwert für den englischen Cosinuswert auswählen.

1
alexis