2008-12-21 7 views
7

Dokładniej, próbuję sprawdzić, czy dany ciąg (zdanie) jest w języku tureckim.Najlepszy sposób na powrót języka danego ciągu znaków

Mogę sprawdzić, czy ciąg ma znaki alfabetu łacińskiego, takie jak Ç, Ş, Ü, Ö, Ğ itd. Jednak nie jest to zbyt wiarygodne, ponieważ można je przekształcić w C, S, U, O, G, zanim otrzymam strunowy.

Inną metodą jest użycie 100 najczęściej używanych słów w języku tureckim i sprawdzenie, czy zdanie zawiera dowolne/niektóre z tych słów. Mogę połączyć te dwie metody i użyć systemu punktowego.

Co według ciebie jest najbardziej skutecznym sposobem rozwiązania mojego problemu w Pythonie?

pytanie pokrewne: (human) Language of a document (API Translation Perl, Google)

+0

Duplikat: http://stackoverflow.com/questions/257125/human-language-of-a-document –

+0

@ S.Lott: Dodałem link do pytania. – jfs

Odpowiedz

14

Jedną opcją byłoby użyć klasyfikatora Bayesa takich jak Reverend. Strona główna Wielebny daje tę sugestię dla detektora języka naiwnego:

from reverend.thomas import Bayes 
guesser = Bayes() 
guesser.train('french', 'le la les du un une je il elle de en') 
guesser.train('german', 'der die das ein eine') 
guesser.train('spanish', 'el uno una las de la en') 
guesser.train('english', 'the it she he they them are were to') 
guesser.guess('they went to el cantina') 
guesser.guess('they were flying planes') 
guesser.train('english', 'the rain in spain falls mainly on the plain') 
guesser.save('my_guesser.bay') 

Szkolenie z bardziej złożonych zestawów tokenów wzmocni wyniki. Aby uzyskać więcej informacji na temat klasyfikacji Bayesian, see here i here.

10

Prosta metoda statystyczna, że ​​użyłem wcześniej:

uzyskać przyzwoitą ilość tekstu szkolenia próbki w języku chcesz wykryć. Podziel go na trygramy, np.

"Hello foobar" w trygramach to: "Hel", "ell", "llo", "lo", "o f", "fo", "foo", "oob", "oba", 'bar'

Dla wszystkich danych źródłowych zliczaj częstotliwość występowania każdego trygramu, prawdopodobnie w dyktacie gdzie klucz = trygam i wartość = częstotliwość. Możesz ograniczyć to do 300 najczęściej używanych 3-literowych kombinacji lub czegoś, jeśli chcesz. Zdejmij gdzieś dyktando.

Aby sprawdzić, czy nowa próbka tekstu jest napisana w tym samym języku, powtórz powyższe kroki dla przykładowego tekstu. Teraz wszystko, co musisz zrobić, to obliczyć korelację między częstotliwościami trygramowymi próbek i częstotliwościami trygramowymi treningu. Będziesz musiał się z nim trochę pogodzić, aby wybrać korelację progową, powyżej której chcesz uznać dane wejście za turecki lub nie.

Sposób ten okazał się być bardzo dokładne, pokonując bardziej wyrafinowane metody, patrz

Cavnar & Trenkle (1994): "N-Gram-Based Text Categorization"

Korzystanie trygramy rozwiązuje problem za pomocą listy słów, ponieważ istnieje ogromna liczba słów w dowolny dany język, zwłaszcza biorąc pod uwagę różne permutacje gramatyczne. Próbowałem szukać wspólnych słów, problem polega na tym, że często dają fałszywy pozytyw dla jakiegoś innego języka, lub sami mają wiele permutacji. Metoda statystyczna nie wymaga dużej przestrzeni dyskowej i nie wymaga złożonego analizowania. Przy okazji ta metoda działa tylko w przypadku języków z fonetycznym systemem zapisu, działa słabo, jeśli w ogóle w językach, które używają języka ideograficznego (tj. Chiński, japoński, koreański).

Alternatywnie wikipedia ma sekcję na tureckie w its handy language recognition chart.

-1

Dlaczego nie wystarczy użyć istniejącego sprawdzanie pisowni biblioteki? Sprawdzanie pisowni w kilku językach, wybierz język z najniższą liczbą błędów.