2014-04-13 12 views
6

Ich habe editiertext in form, ich möchte, wenn benutzereingabe text in editierbartext mein programm erkennen welche sprache eingefügt zu bearbeitentextWie eine Zeichenfolge zu bestimmen ist Englisch oder Persisch?

Gibt es eine Möglichkeit zu bestimmen, eine Zeichenfolge ist Englisch oder Persisch?

fand ich diesen Code für arabische

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; 
} 

aber wie kann ich diesen Code für persisch ändern?

+0

Der Zeichencodebereich ist wahrscheinlich robust genug für diese einfache Frage. Sehen Sie sich für einige fortgeschrittenere Ansätze einige Sprachidentifikationsbibliotheken an. – tripleee

+0

@tripleee Was ist der persische Zeichencodebereich? – Saeed

+0

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

Antwort

1

Warum bewerten Sie es nicht, wenn die Tastatur Popup ist .. Means Sie können es tun, indem Sie die Sprache des Telefons bekommen ... hier ist die Methode useLocale.getDefault(). GetDisplayLanguage(); MinSDK ist 11 ist erforderlich.

+0

aber vielleicht Benutzer kopieren und Text einfügen! – Saeed

+0

und Programm minSDK ist 8 – Saeed

+0

Wenn Ihre App online ist ... versuchen Sie, Google-Übersetzung API verwenden – Bhaskar

0

Die Verwendung des Zeichenbereichs ist keine perfekte Methode, um einige Sprachen zu erkennen, die Bereiche wie Arabisch, Persisch und Urdu überlappen. Aber wenn Sie auf diese Weise bestehen, sucht mein Vorschlag nach speziellen Zeichen, die sprachspezifisch sind. Zum Beispiel sind گ oder پ auf Persisch, aber nicht auf Arabisch. Auf der anderen Seite ist in oder maybe in arabischem Text häufiger als Persisch. Durch Zählen dieser spezifischen Zeichen können Sie zwischen Arabisch, Persisch und Urdu unterscheiden.

Obwohl ich gute Ergebnisse von der erwähnten Methode habe, ist die Verwendung von N-Grammen zur Erkennung einer Sprache beliebter und zuverlässiger. Es gibt viele Bibliotheken, die eine Spracherkennungsaufgabe mit dieser Methode ausführen.

1

Es gibt keine genaue Art und Weise, um zu bestimmen, welche Sprache Ihre Benutzer in ist die Eingabe, wenn Sie wirklich kompliziert, also warum das Verfahren Beispiel, das Sie gegeben haben isProbablyArabic statt isArabic genannt wird. Wenn Ihre Benutzer ausschließlich auf Englisch oder Farsi schreiben und nichts anderes, ist eine Option, eine Regex zu verwenden, die überprüft, ob der Text des Benutzers weströmische Zeichen enthält ("^[a-zA-Z]*$"). Wenn dies falsch ist, können Sie annehmen, dass sie persisch eingegeben haben obwohl es alles sein könnte, was einen anderen Zeichensatz verwendet.

1

versuchen Sie diese Methode

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; 

Es auf this Antwort basiert. Alternativ können Sie auch die Bereiche, in Guido Mokka Antwort gegeben verwenden:

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

Sie wissen, kann ein String ist Englisch oder persisch von Regex verwenden.

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(); 
} 

dies funktioniert nur mit Wörtern und Zahlen. Wenn ein Zeichen wie '=' oder '+' vorhanden ist, würde die Funktion false zurückgeben. Sie können das beheben, indem Sie die Regex so anpassen, dass sie Ihren Anforderungen entspricht.

Verwandte Themen