Erkennung, ob Text englisch ist (in loser Schüttung)

8

Ich suche nach einem einfachen Weg, um zu erkennen, ob ein kurzer Auszug aus Text, ein paar Sätze Englisch ist oder nicht. Scheint mir, dass dieses Problem viel einfacher ist, als zu versuchen, eine willkürliche Sprache zu entdecken. Gibt es Software, die das kann? Ich schreibe in Python und würde eine Python-Bibliothek bevorzugen, aber etwas anderes wäre auch in Ordnung. Ich habe versucht, Google, aber dann erkannte, dass die TOS automatisierte Abfragen nicht erlaubt.

    
user449511 05.01.2011, 14:20
quelle

5 Antworten

10

Ich habe eine Methode gelesen, um mit Hilfe von Trigrammen

enlgische Sprache zu erkennen

Ссылка

Sie können über den Text gehen und versuchen, die am häufigsten verwendeten Trigramme in den Wörtern zu erkennen. Wenn die am häufigsten verwendeten Begriffe mit den am häufigsten verwendeten englischen Wörtern übereinstimmen, wird der Text möglicherweise in Englisch geschrieben.

Versuchen Sie, in diesem Rubinprojekt nachzusehen:

Ссылка

    
HyLian 05.01.2011, 14:28
quelle
4

BEARBEITEN: Dies funktioniert in diesem Fall nicht, da OP Text in großen Mengen verarbeitet, der gegen die TOS von Google verstößt.

Verwenden Sie die Spracherkennungs-API von Google Übersetzer. Python-Beispiel aus der Dokumentation:

%Vor%     
marcog 05.01.2011 14:26
quelle
1

Obwohl es nicht so gut wie das von Google ist, hatte ich gute Ergebnisse mit dem Apache Nutch LanguageIdentifier, der mit seinen eigenen vortrainierten Ngram-Modellen ausgeliefert wird. Ich hatte recht gute Ergebnisse in einem großen (50GB pdf, Text - meist) Korpus realer Daten in mehreren Sprachen.

Es ist in Java, aber ich bin mir sicher, dass Sie die Ngram-Profile daraus erneut lesen können, wenn Sie es in Python neu implementieren möchten.

    
Johan Benum Evensberget 05.01.2011 17:12
quelle
1

Google Übersetzer-API v2 ermöglicht automatisierte Abfragen , erfordert jedoch die Verwendung von ein API-Schlüssel, den Sie kostenlos in der Google APIs-Konsole erhalten.

Um festzustellen, ob der Text englisch ist, können Sie verwenden detect_language_v2() Funktion (die diese API verwendet) aus meiner Antwort auf die Frage Python - Kann ich den Unicode-String-Sprachcode erkennen? :

%Vor%     
jfs 12.04.2011 08:38
quelle
0

Ich habe kürzlich eine Lösung dafür geschrieben. Meine Lösung ist nicht narrensicher, und ich denke nicht, dass es für große Mengen von Text rechenfähig wäre, aber es scheint mir gut für kleinere Sätze zu funktionieren.

Angenommen, Sie haben zwei Textfolgen:

  1. "LETMEBEGINBYSAYINGTHANKS"
  2. "UNGHSYINDJFHAKJSNFNDKUAJUD"

Das Ziel ist dann zu bestimmen, dass 1. wahrscheinlich Englisch ist, während 2. nicht. Intuitiv ist die Art und Weise, wie mein Verstand dies bestimmt, durch das Suchen nach den Wortgrenzen englischer Wörter in den Sätzen (LET, ME, BEGIN, etc.). Aber das ist nicht rechnerisch, weil es überlappende Wörter gibt (BE, GIN, BEGIN, SAY, SAGEN, DANK, DANK, usw.).

Meine Methode macht folgendes:

  1. Nimm den Schnittpunkt von { known English words } und { all substrings of the text of all lengths } .
  2. Konstruiere einen Graphen von Scheitelpunkten, deren Positionen die Anfangsindizes der Wörter im Satz sind, mit gerichteten Kanten zu den Anfangspositionen des Buchstabens nach dem Ende des Wortes. ZB (0) wäre L , also könnte "LET" durch (0) -> (3) repräsentiert werden, wobei (3) ist M , also ist "LET ME".
  3. Finde die größte Ganzzahl n zwischen 0 und len(text) , für die ein einfacher gerichteter Pfad von Index 0 zu Index n existiert.
  4. Teilen Sie diese Zahl n durch die Länge des Textes, um eine ungefähre Vorstellung davon zu bekommen, wie viel Prozent des Textes als konsekutive englische Wörter erscheinen.

Beachten Sie, dass mein Code keine Leerzeichen zwischen Wörtern annimmt, aber ich kann mir vorstellen, dass Sie ihn so anpassen könnten, dass er Leerzeichen relativ einfach berücksichtigt. Nicht, damit mein Code funktioniert, Sie brauchen eine englische Wordlist-Datei. Ich habe einen von hier , aber Sie können jede solche Datei verwenden, und ich stelle mir vor, auf diese Weise könnte diese Technik sein auch auf andere Sprachen erweitert.

Hier ist der Code:

%Vor%

Und hier ist I/O für die ersten Beispiele, die ich angegeben habe:

%Vor%

Also bin ich ungefähr zu 96% sicher, dass LETMEBEGINBYSAYINGTHANKS Englisch ist und 8% sicher, dass UNGHSYINDJFHAKJSNFNDKUAJUD Englisch ist. Was ungefähr richtig klingt!

Um dies auf viel größere Textteile auszudehnen, würde ich vorschlagen, zufällige kurze Teilstrings zu unterteilen und ihre "Englishness" zu überprüfen. Hoffe das hilft!

    
Max von Hippel 17.02.2018 16:46
quelle

Tags und Links