2009-09-23 9 views
17

Gibt es eine C# -Bibliothek, die die Sprache eines bestimmten Texts erkennen kann? für einen Eingabetext "This is a sentence" sollte es die Sprache als "English" erkennen. Oder für "Esto es una sentencia" sollte es die Sprache als "Spanish" erkennen.Sprache des Texts erkennen

Ich verstehe, dass Spracherkennung aus Text kein deterministisches Problem ist. Aber sowohl Google Translate als auch Bing Translator haben eine "Auto detect" -Option, die die Eingabesprache am besten schätzt. Gibt es etwas ähnliches öffentlich verfügbar, vorzugsweise in C#?

+0

Nur den anderen Tag ich mit Google eines meiner Intranet Web-Seiten auf einem PC gesehen Übersetzer installiert Die Seite hatte nur ein paar Worte wie ** mean ** und ** stddev ** und ein paar Zahlen. Google Übersetzer sagte mir, die Seite sei in ** Rumänisch ** und fragte, ob ich eine Übersetzung wollte. Wenn es kein deterministisches Problem ist, wie kann Software einen guten Job machen? – pavium

+3

Sie machen manchmal einen guten Job. Natürlich wird es Eingänge geben, für die sie absolut versagen, aber für die wahrscheinlichen Eingaben verhalten sie sich ziemlich gut. –

+2

http://stackoverflow.com/questions/1192768/return-the-language-of-a-given-string/1192802 # 1192802 –

Antwort

0

Sie wollen einen maschinellen Lernalgorithmus, der auf versteckten Markov-Ketten basiert, mehrere Texte in verschiedenen Sprachen verarbeiten.

Dann, wenn es zu dem unbekannten Text kommt, ist die Sprache, die die engere "Punktzahl" hat, der Gewinner.

1

Hier haben Sie einen einfachen Detektor basierend auf Bigramm-Statistik (im Grunde bedeutet, aus einem großen Satz zu lernen, die häufig auf jeder Sprache mehr Bigramme auftreten und dann diejenigen, die in einem Stück Text zählen, um Ihre zuvor erfassten Werte zu vergleichen):

http://allantech.blogspot.com/2007/07/automatic-language-detection.html

Dies ist wahrscheinlich gut genug für viele (die meisten?) Anwendungen und erfordert keinen Internetzugang.

Natürlich wird es schlechter als Google oder Bing-Algorithmus (die selbst nicht groß sind). Wenn Sie ausgezeichnete Erkennungsleistung benötigen, müssten Sie sowohl viel harte Arbeit als auch riesige Datenmengen erledigen.

Die andere Option wäre die Verwendung von Google oder Bing-APIs, wenn Ihre App über einen Internetzugang verfügt.

+1

In der Tat wird dieser Ansatz recht gute Ergebnisse geben. Es kann verbessert werden, indem N-Gramm anstelle von Bigrammen verwendet wird. Es wird jedoch immer schwierig sein, sehr ähnliche Sprachen (z. B. Polnisch und Tschechisch) voneinander zu unterscheiden. Sprachen wie Griechisch werden aber sehr einfach sein ... –

+0

Um Missverständnisse zu vermeiden, was würdest du in diesem Zusammenhang als gut bezeichnen? –

2

Spracherkennung ist eine ziemlich schwierige Sache zu tun.

Einige Sprachen sind aufgrund der verwendeten Diakritika und Digraphen/Trigraphen einfacher zu erkennen als andere. Zum Beispiel werden double-acute accents fast ausschließlich in ungarischer Sprache verwendet. Die dotless i ‘ ı ’, wird ausschließlich verwendet [Ich denke] in Türkisch, T-Komma (nicht T-Cedilla) wird nur in Rumänisch verwendet, und die eszett ‘ ß ’ tritt nur in deutscher Sprache.

Einige Digraphen, Trigraphen und Tetragraphen sind auch ein gutes Give-Away. Zum Beispiel werden Sie wahrscheinlich ‘ eeuw ’ und ‘ ieuw ’ in erster Linie auf Niederländisch finden und ‘ TSCH ’ und ‘ dsch ’ vor allem in deutscher Sprache usw.

Mehr Werbegeschenke würden gemeinsame Wörter oder gemeinsame Präfixe/Suffixe umfassen, die in eine bestimmte Sprache. Manchmal kann sogar die verwendete Interpunktion helfen, eine Sprache zu bestimmen (Zitat-Stil und Verwendung usw.).

Wenn eine solche Bibliothek existiert würde ich gerne darüber wissen, da ich selbst an einem arbeite.

+0

Sie sollten über einen generischen N-Gramm basierten Klassifikator auf Basis eines Trainingskorpus nachdenken. –

0

Ich habe festgestellt, dass „textcat“ für diese sehr nützlich ist.Ich habe eine PHP-Implementierung, PHP Text Cat, basierend auf dieser this original implementation verwendet, und fand es zuverlässig. Wenn Sie sich die Quellen ansehen, werden Sie feststellen, dass es nicht erschreckend schwierig ist, sie in der Sprache Ihrer Wahl zu implementieren. Die harte Arbeit - die Buchstabenkombinationen, die für eine bestimmte Sprache relevant sind - sind alle als Daten da.

26

Ja, in der Tat ist TextCat sehr gut für die Spracherkennung. Und es hat viele Implementierungen in verschiedenen Sprachen.

In .Net gab es keine Ports. Also habe ich einen geschrieben: NTextCat (NuGet, Online Demo).

Es ist pure .NET Framework DLL + Befehlszeilenschnittstelle dazu. Standardmäßig verwendet es ein Profil von 14 Sprachen.

Jede Rückmeldung wird sehr geschätzt! Neue Ideen und Feature-Anfragen sind zu begrüßen :)

+1

Versuchte NTextCat heute, und es ist sehr einfach zu arbeiten! –

+0

Danke für die Benutzung! Jede besondere Rückmeldung wird sehr geschätzt. Bitte posten Sie Ihr Feedback (falls vorhanden) [auf dieser Seite] (http://ntextcat.codeplex.com/discussions) –

+0

Nun, es erkannte nicht Lettisch .. – Edgar

Verwandte Themen