Có cách nào để xác định chuỗi là tiếng Anh hoặc tiếng Ả Rập không?Cách xác định chuỗi là tiếng Anh hoặc tiếng Ả Rập?
Trả lời
Đây là một logic đơn giản mà tôi chỉ cố gắng:
public static boolean isProbablyArabic(String s) {
for (int i = 0; i < s.length();) {
int c = s.codePointAt(i);
if (c >= 0x0600 && c <= 0x06E0)
return true;
i += Character.charCount(c);
}
return false;
}
Nó tuyên bố văn bản như arabic khi và chỉ khi một điểm mã unicode arabic được tìm thấy trong văn bản. Bạn có thể nâng cao logic này để phù hợp hơn với nhu cầu của bạn.
Phạm vi 0600 - 06E0 là phạm vi điểm mã ký tự tiếng Ả Rập và các biểu tượng (Xem Unicode tables)
Bạn cũng có thể muốn kiểm tra _other_ phạm vi tiếng Ả Rập - xem liên kết trong câu trả lời của tôi. – paxdiablo
Phương pháp này rất không hiệu quả đối với các chuỗi lớn vì nó tính toán độ dài của chuỗi trong mỗi lần lặp. Character.codePointCount (s, 0, s.length()) đầu tiên được gán cho một biến để nó không gọi hàm này trong mỗi lần lặp. – Jazib
@jazib: Tốt, cảm ơn. Tôi đã sửa mã cho phù hợp. –
Bạn có thể sử dụng Phân loại văn bản dựa trên N-gram (google cho cụm từ đó) nhưng không phải là kỹ thuật chống lỗi và có thể yêu cầu chuỗi không quá ngắn.
Bạn cũng có thể quyết định rằng một chuỗi chỉ có chữ cái ASCII không phải là tiếng Ả Rập.
Nó cũng cần một số lượng đáng kể dữ liệu đào tạo (chưa kể thời gian đào tạo). – brimborium
Bạn thường có thể biết bằng các điểm mã trong chính chuỗi đó. Ả Rập chiếm certain blocks trong không gian mã Unicode.
Đó là một cược khá an toàn, nếu một tỷ lệ đáng kể các ký tự tồn tại trong các khối đó (chẳng hạn như بلدي الحوامات مليء الثعابينة
), đó là văn bản tiếng Ả Rập.
Bạn nên cung cấp một bản demo Java rất ngắn về ý tưởng của bạn. Nếu không, tôi nghĩ rằng đây là cách tốt nhất để đi trong trường hợp này (tiếng Anh vs arabic). – brimborium
Hãy thử này:
internal static bool ContainsArabicLetters(string text)
{
foreach (char character in text.ToCharArray())
{
if (character >= 0x600 && character <= 0x6ff)
return true;
if (character >= 0x750 && character <= 0x77f)
return true;
if (character >= 0xfb50 && character <= 0xfc3f)
return true;
if (character >= 0xfe70 && character <= 0xfefc)
return true;
}
return false;
}
Một thay đổi nhỏ để trang trải tất cả các nhân vật arabic và biểu tượng dao động
private boolean isArabic(String text){
String textWithoutSpace = text.trim().replaceAll(" ",""); //to ignore whitepace
for (int i = 0; i < textWithoutSpace.length();) {
int c = textWithoutSpace.codePointAt(i);
//range of arabic chars/symbols is from 0x0600 to 0x06ff
//the arabic letter 'لا' is special case having the range from 0xFE70 to 0xFEFF
if (c >= 0x0600 && c <=0x06FF || (c >= 0xFE70 && c<=0xFEFF))
i += Character.charCount(c);
else
return false;
}
return true;
}
Java tự hỗ trợ kiểm tra ngôn ngữ khác nhau bằng unicode, tiếng Ả Rập cũng được hỗ trợ. Cách đơn giản hơn và nhỏ nhất để thực hiện tương tự là bằng UnicodeBlock
public static boolean isTextContainsHindi(String text) {
for (char charac : text.toCharArray()) {
if (Character.UnicodeBlock.of(charac) == Character.UnicodeBlock.Ar) {
return true;
}
}
return false;
}
Mã của bạn không phải là compilable trong trường hợp của tôi trừ khi tôi thay thế Character.UnicodeBlock.Ar với Character.UnicodeBlock.ARABIC, cũng vui lòng nhận thấy rằng tên phương pháp của bạn là sai isTextContainsHindi nó phải là isTextContainsArabic @Guarav Tyagi –
- 1. In chuỗi tiếng ả rập trong java
- 2. Solr cho tiếng Ả Rập
- 3. Dải ký tự không phải chữ và số từ tiếng Ả Rập UTF8 + Chuỗi tiếng Anh
- 4. Sử dụng Eclipse với tiếng Ả Rập và tiếng Anh trên cùng một dòng
- 5. Trong Xcode, cách hiển thị văn bản hợp nhất tiếng Anh + tiếng Ả Rập và bắt đầu bằng tiếng Ả Rập?
- 6. Văn bản tiếng Ả Rập trong as3
- 7. Cách lấy bàn phím tiếng Ả Rập trong iphone sdk
- 8. iphone sdk: làm thế nào để chuyển đổi định dạng ngày tiếng Ả Rập sang tiếng Anh?
- 9. Làm cách nào để chuyển đổi chữ số tiếng Anh sang chữ số Ả Rập?
- 10. Sắp xếp các từ tiếng Ả Rập trong Java
- 11. Làm cách nào để viết các ký tự không phải tiếng Anh như ký tự tiếng Ả Rập hoặc tiếng Ba Tư vào một hình ảnh?
- 12. Mã hóa các từ tiếng Ả Rập bằng NLTK
- 13. Chèn & Chọn dữ liệu tiếng Ả Rập Android SQLite
- 14. Xóa ký tự rác trong tiếng Ả Rập
- 15. Thư viện OCR nguồn mở cho tiếng Ả Rập
- 16. Lỗi khi writting tiếng Ả Rập để hình ảnh
- 17. Phân tích cú pháp XML tiếng Ả Rập trong Android
- 18. Làm cách nào để tích hợp hai ngôn ngữ (tiếng Anh hoặc tiếng Ả Rập) vào một dự án trong iphone sdk
- 19. vấn đề với mệnh đề WHERE khớp với chuỗi tiếng Ả Rập
- 20. URDU hoặc Hỗ trợ tiếng Ả Rập trong Android cho trình giả lập và thiết bị
- 21. Bộ chọn ngày lịch Hijri (tiếng Ả Rập) sử dụng PHP hoặc Javascript
- 22. PHP: Làm cách nào để phát hiện xem chuỗi đầu vào có phải là tiếng Ả Rập
- 23. Có các ngôn ngữ khác ngoài tiếng Anh gắn thêm hậu tố cho chữ số Ả Rập không?
- 24. Có cách nào để lưu trữ ngày tiếng Ả Rập với Postgres không?
- 25. searchDisplayController không hiển thị kết quả nếu ngôn ngữ iphone là phi tiếng Anh
- 26. Thiết kế giao diện người dùng cho ứng dụng Hỗ trợ tiếng Ả Rập trong Android
- 27. Làm thế nào để chèn ký tự tiếng Ả Rập vào cơ sở dữ liệu sql?
- 28. Động từ tiếng Anh
- 29. Ngôn ngữ Ả Rập Android
- 30. Nhiều ngôn ngữ (tiếng Anh, tiếng Pháp) trên ASP.NET Page
Từ quan điểm của thế giới ngày nay, "1234" là cả hai tôi nghĩ? –
@Nantant, tiếng Ả Rập có sử dụng số thường hoặc Rumi không? – paxdiablo
Bạn có nghĩa là liệu nó có chứa văn bản tiếng Anh hoặc tiếng Ả Rập hay không hoặc liệu nó có được mã hóa theo cách đó không? Trường hợp thứ hai nên khá dễ dàng, vì các ký tự không nằm trong cùng một phạm vi Unicode (xem: http://en.wikipedia.org/wiki/Arabic_alphabet). – Martin