Je nach Fall könnten Sie an einer der folgenden Methoden interessiert sein:
Methode 0: Verwenden Sie eine API oder Bibliothek
Normalerweise gibt es einige Probleme mit diesen Bibliotheken, da einige von ihnen für kleine Texte nicht genau sind, einige Sprachen fehlen, langsam sind, eine Internetverbindung erfordern, nicht frei sind, ... Aber im Allgemeinen werden sie den meisten Anforderungen gerecht .
Methode 1: Sprachmodelle
Ein Sprachmodell gibt uns die Wahrscheinlichkeit einer Folge von Wörtern. Dies ist wichtig, da wir so die Sprache eines Textes zuverlässig erkennen können, auch wenn der Text Wörter in anderen Sprachen enthält (z. B.: "Hola" bedeutet auf Spanisch "Hallo" ).
Sie können N Sprachmodelle (eines pro Sprache) verwenden, um Ihren Text zu bewerten. Die erkannte Sprache ist die Sprache des Modells, mit dem Sie die höchste Punktzahl erzielt haben.
Wenn Sie ein einfaches Sprachmodell dafür erstellen möchten, würde ich 1 Gramm wählen. Dazu müssen Sie nur zählen, wie oft jedes Wort aus einem großen Text (z. B. Wikipedia Corpus in der Sprache "X") angezeigt wurde.
Dann ist die Wahrscheinlichkeit eines Wortes seine Häufigkeit geteilt durch die Gesamtzahl der analysierten Wörter (Summe aller Häufigkeiten).
the 23135851162
of 13151942776
and 12997637966
to 12136980858
a 9081174698
in 8469404971
for 5933321709
...
=> P("'Hola' means 'hello' in spanish") = P("hola") * P("means") * P("hello") * P("in") * P("spanish")
Wenn der zu erkennende Text ziemlich groß ist, empfehle ich, N zufällige Wörter abzutasten und dann die Summe der Logarithmen anstelle von Multiplikationen zu verwenden, um Gleitkommapräzisionsprobleme zu vermeiden.
P(s) = 0.03 * 0.01 * 0.014 = 0.0000042
P(s) = log10(0.03) + log10(0.01) + log10(0.014) = -5.376
Methode 2: Mengen schneiden
Ein noch einfacherer Ansatz besteht darin, N Sätze (einen pro Sprache) mit den häufigsten M häufigsten Wörtern vorzubereiten. Dann schneiden Sie Ihren Text mit jedem Satz. Das Set mit der höchsten Anzahl von Kreuzungen ist Ihre erkannte Sprache.
spanish_set = {"de", "hola", "la", "casa",...}
english_set = {"of", "hello", "the", "house",...}
czech_set = {"z", "ahoj", "závěrky", "dům",...}
...
text_set = {"hola", "means", "hello", "in", "spanish"}
spanish_votes = text_set.intersection(spanish_set)
english_votes = text_set.intersection(english_set)
czech_votes = text_set.intersection(czech_set)
...
Methode 3: Zip-Komprimierung
Dies ist mehr eine Kuriosität als alles andere, aber hier ist es ... Sie können Ihren Text komprimieren (z. B. LZ77) und dann den Reißverschlussabstand in Bezug auf einen komprimierten Referenztext (Zielsprache) messen. Persönlich hat es mir nicht gefallen, weil es langsamer, weniger genau und weniger beschreibend ist als andere Methoden. Dennoch könnte es interessante Anwendungen für diese Methode geben. Lesen Sie mehr: Sprachbäume und Zippen