2014-04-13 13 views
6

Mam edittext w formularzu, Chcę, gdy użytkownik wprowadzi tekst do edittext, mój program wykrywa język wstawiony do edytora edittextJak ustalić ciąg jest angielski lub perski?

Czy istnieje sposób na określenie ciągu znaków w języku angielskim lub perskim?

znalazłem ten kod dla arabskiego

public static boolean isProbablyArabic(String s) { 
for (int i = 0; i < Character.codePointCount(s, 0, s.length()); i++) { 
    int c = s.codePointAt(i); 
    if (c >= 0x0600 && c <=0x06E0) 
     return true; 
} 
return false; 
} 

ale jak mogę zmienić ten kod na perski?

+0

Zakres kodów znaków jest prawdopodobnie wystarczający do tego prostego pytania. Aby uzyskać bardziej zaawansowane podejście, spójrz na niektóre biblioteki identyfikacji języków. – tripleee

+0

@tripleee Jaki jest zakres kodów perskich znaków? – Saeed

+0

http://en.wikipedia.org/wiki/Arabic_script_in_Unicode – tripleee

Odpowiedz

1

Dlaczego nie oceniasz go, gdy klawiatura jest wyskakująca .. Oznacza Możesz to zrobić, pobierając język telefonu ... tutaj jest metoda useLocale.getDefault(). GetDisplayLanguage(); minSDK ma wartość 11.

+0

, ale może użytkownik kopiuje i wkleja tekst! – Saeed

+0

i program minSDK to 8 – Saeed

+0

, jeśli twoja aplikacja jest w trybie online ... spróbuj użyć interfejsu API do tłumaczenia google – Bhaskar

0

Korzystanie z zakresu znaków nie jest doskonałym sposobem wykrywania niektórych języków, które mają nałożony zakres, np. Arabski, perski i urdu. Ale jeśli nalegasz w ten sposób, moja sugestia szuka specjalnych znaków, które są specyficzne dla języka. Na przykład گ lub پ są w języku perskim, ale nie są w języku arabskim. Z drugiej strony ئ lub ة może bardziej powszechne w tekście arabskim niż perskim. Licząc te konkretne znaki można rozróżnić arabski, perski i urdu.

Mimo że mam dobre wyniki z wymienionej metody, używanie n-gramów do wykrywania języka jest bardziej popularne i niezawodne. Istnieje wiele bibliotek, które wykonują zadanie wykrywania języka za pomocą tej metody.

1

Nie ma dokładny sposób określić, w jakim języku Twój użytkownik wpisując chyba że masz naprawdę skomplikowane, więc dlaczego przykład metoda dałeś nazywa isProbablyArabic zamiast isArabic. Jeśli Twoi użytkownicy piszą wyłącznie w języku angielskim lub farsi i nic poza tym, jedną z opcji jest użycie wyrażenia regularnego, które sprawdza, czy tekst użytkownika zawiera zachodnie znaki rzymskie ("^[a-zA-Z]*$"), jeśli to zwróci false, możesz założyć, że wpisano w języku perskim , choć może to być wszystko, co używa innego zestawu znaków.

1

spróbować tej metody

public static boolean textIsPersian(String s) { 
for (int i = 0; i < Character.codePointCount(s, 0, s.length()); i++) { 
    int c = s.codePointAt(i); 
    if (c >= 0x0600 && c <=0x06FF || c== 0xFB8A || c==0x067E || c==0x0686 || c==0x06AF) 
     return true; 
} 
return false; 

Jest on oparty na this odpowiedź. Alternatywnie, można użyć zakresów podanych w odpowiedzi Guido Mocha za:

public static boolean textIsPersian(String s) { 
for (int i = 0; i < Character.codePointCount(s, 0, s.length()); i++) { 
    int c = s.codePointAt(i); 
    if ((c >= 0x0600 && c <=0x06FF) || (c>=0xFB50 && c<=0xFDFF) || (c>=0xFE70 && c<=0xFEFF)) 
     return true; 
} 
return false; 
} 
2

Można wiedzieć ciąg jest angielski lub perski za pomocą wyrażenia regularnego.

public static final Pattern VALID_NAME_PATTERN_REGEX = Pattern.compile("[a-zA-Z_0-9]+$"); 

public static boolean isEnglishWord(String string) { 
    return VALID_NAME_PATTERN_REGEX.matcher(string).find(); 
} 

działa to tylko ze słowami i cyframi. jeśli istnieje znak taki jak "=" lub "+", funkcja zwróci wartość false. możesz to naprawić, edytując wyrażenie regularne, aby dopasować to, czego potrzebujesz.

Powiązane problemy