Có cách nào để phát hiện ngôn ngữ của dữ liệu được nhập thông qua trường nhập không?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
Trả lời
hmm tôi có thể cung cấp một phiên bản cải tiến của chức năng DimaKrasun của:
functoin is_arabic($string) {
if($string === 'arabic') {
return true;
}
return false;
}
ổn, đủ nói đùa!
Đề xuất của Pekkas sử dụng api dịch google là một ứng dụng tốt! nhưng bạn đang dựa vào một dịch vụ bên ngoài luôn phức tạp hơn, v.v.
tôi nghĩ Rushyos là tốt! nó không dễ dàng. tôi viết hàm sau cho bạn, nhưng nó chưa được thử nghiệm, nhưng nó phải làm việc ...
<?
function uniord($u) {
// i just copied this function fron the php.net comments, but it should work fine!
$k = mb_convert_encoding($u, 'UCS-2LE', 'UTF-8');
$k1 = ord(substr($k, 0, 1));
$k2 = ord(substr($k, 1, 1));
return $k2 * 256 + $k1;
}
function is_arabic($str) {
if(mb_detect_encoding($str) !== 'UTF-8') {
$str = mb_convert_encoding($str,mb_detect_encoding($str),'UTF-8');
}
/*
$str = str_split($str); <- this function is not mb safe, it splits by bytes, not characters. we cannot use it
$str = preg_split('//u',$str); <- this function woulrd probably work fine but there was a bug reported in some php version so it pslits by bytes and not chars as well
*/
preg_match_all('/.|\n/u', $str, $matches);
$chars = $matches[0];
$arabic_count = 0;
$latin_count = 0;
$total_count = 0;
foreach($chars as $char) {
//$pos = ord($char); we cant use that, its not binary safe
$pos = uniord($char);
echo $char ." --> ".$pos.PHP_EOL;
if($pos >= 1536 && $pos <= 1791) {
$arabic_count++;
} else if($pos > 123 && $pos < 123) {
$latin_count++;
}
$total_count++;
}
if(($arabic_count/$total_count) > 0.6) {
// 60% arabic chars, its probably arabic
return true;
}
return false;
}
$arabic = is_arabic('عربية إخبارية تعمل على مدار اليوم. يمكنك مشاهدة بث القناة من خلال الموقع');
var_dump($arabic);
?>
suy nghĩ cuối cùng: như bạn thấy tôi thêm ví dụ một bộ đếm latin, phạm vi chỉ là một số giả b ut theo cách này, bạn có thể phát hiện bộ ký tự (tiếng do thái, tiếng la tinh, tiếng ả rập, tiếng Hin-ddi, tiếng Trung, v.v ...)
bạn cũng có thể muốn loại bỏ một số ký tự đầu tiên ... có thể @, dấu cách, dấu ngắt dòng, dấu gạch chéo, v.v. .. cờ PREG_SPLIT_NO_EMPTY cho hàm preg_split sẽ hữu ích nhưng vì lỗi mà tôi không sử dụng ở đây.
bạn cũng có thể có một bộ đếm cho tất cả các bộ ký tự và xem cái nào dĩ nhiên nhất ...
và cuối cùng là bạn nên xem xét chặt chuỗi của bạn tắt sau 200 ký tự hoặc một cái gì đó. điều này là đủ để cho biết bộ ký tự nào được sử dụng.
và bạn phải thực hiện một số thao tác xử lý lỗi! như chia cho số không, chuỗi rỗng, v.v. đừng quên điều đó, làm ơn ... bất kỳ câu hỏi nào? bình luận!
nếu bạn muốn phát hiện LANGUAGE của chuỗi, bạn nên chia thành các từ và kiểm tra các từ trong một số bảng được xác định trước. bạn không cần một từ điển hoàn chỉnh, chỉ là những từ phổ biến nhất và nó sẽ hoạt động tốt. tokenization/bình thường hóa là phải là tốt! có thư viện cho anyway đó và đây không phải là những gì bạn yêu cầu :) chỉ muốn đề cập đến nó
Chức năng của bạn khiến đầu tôi mờ đi. Tôi sẽ cố gắng thực hiện nó khi tôi đang ở trong một tâm trạng tốt hơn, và cho bạn biết nếu nó làm việc trên nó. Nhưng từ những gì tôi đọc, có vẻ đầy hứa hẹn. – HyderA
roger đó, đừng quên bao gồm các chức năng uniord bên ngoài trên đầu trang! Tôi biết nếu bạn cần bất kỳ halp nào –
Từ điển là một ý tưởng rất hay, chỉ có vấn đề là ở ngoài kịch bản tiếng Latin, bạn nhanh chóng gặp phải những hoàn cảnh mà bối cảnh bên ngoài thay đổi các ký tự - chẳng hạn như các ký tự multi-glyph. Bạn sẽ phải cẩn thận để tránh các ký tự nhạy cảm với ngữ cảnh trong từ điển của bạn. – Rushyo
Tôi không biết giải pháp PHP cho việc này, không.
Tuy nhiên, Google Translate Ajax APIs có thể dành cho bạn.
Check-out đoạn javascript này từ các tài liệu API: Example: Language Detection
Bạn có thể sử dụng chức năng, mà tôi đã viết cho bạn:
<?php
/**
* Return`s true if string contains only arabic letters.
*
* @param string $string
* @return bool
*/
function is_arabic($string)
{
return (preg_match("/^\p{Arabic}/i", $string) > 0);
}
Nhưng xin, kiểm tra xem nó, trước khi sử dụng.
[EDIT 1]
Câu hỏi của bạn: "Làm thế nào để phát hiện nếu một chuỗi đầu vào là tiếng Ả Rập" Và tôi đã trả lời nó, điều gì sai?
[EDIT 2]
đọc này - Detect language from string in PHP
[EDIT 3]
Excuse, tôi viết lại chức năng này, hãy thử nó:
function is_arabic($subject)
{
return (preg_match("/^[\x0600-\x06FF]/i", $subject) > 0);
}
"Is Arabic"! = "Contains 'Arabic'" - tiêu đề câu hỏi có thể hơi mơ hồ, nhưng cơ thể câu hỏi thì rõ ràng hơn, phải không? – Piskvor
Nếu chuỗi là arabic, nó có chứa chữ cái arabic hay không? –
Piskvor, Regex của DimaKrasun phải thực sự phát hiện các ký tự tiếng Ả Rập ... không chỉ là chuỗi 'tiếng Ả Rập'. – Rushyo
Tôi cho rằng bạn đang đề cập đến một chuỗi Unicode ... trong trường hợp đó, chỉ cần tìm pr esence của bất kỳ ký tự nào có mã giữa U + 0600 – U + 06FF (1536–1791) trong chuỗi.
Bao gồm, để rõ ràng. – Rushyo
điều đầu tiên tôi nghĩ về regex với U + 0600 – U + 06FF, nhưng tiếp theo là sử dụng \ p {Arabic} - trong regex, tôi nghĩ \ p {Arabic} giống với U + 0600 – U + 06FF, nhưng tôi đã không thử nó –
Tôi khá chắc chắn nó là như nhau, nhưng phương pháp này nhanh hơn rất nhiều. – Rushyo
này sẽ kiểm tra nếu chuỗi là tiếng Ả Rập Hoặc có văn bản tiếng Ả Rập
văn bản phải được UNICODE ví dụ UTF-8
$str = "بسم الله";
if (preg_match('/[أ-ي]/ui', $str)) {
echo "A match was found.";
} else {
echo "A match was not found.";
}
Nó hoạt động hoàn hảo. Cảm ơn bạn rất nhiều! – wpcoder
public static function isArabic($string){
if(preg_match('/\p{Arabic}/u', $string))
return true;
return false;
}
Chức năng này kiểm tra xem dòng/câu đã nhập có phải là tiếng Ả Rập hay không. Tôi cắt nó trước rồi kiểm tra từng chữ bằng cách tính tổng số cho cả hai.
function isArabic($string){
// Initializing count variables with zero
$arabicCount = 0;
$englishCount = 0;
// Getting the cleanest String without any number or Brackets or Hyphen
$noNumbers = preg_replace('/[0-9]+/', '', $string);
$noBracketsHyphen = array('(', ')', '-');
$clean = trim(str_replace($noBracketsHyphen , '', $noNumbers));
// After Getting the clean string, splitting it by space to get the total entered words
$array = explode(" ", $clean); // $array contain the words that was entered by the user
for ($i=0; $i <= count($array) ; $i++) {
// Checking either word is Arabic or not
$checkLang = preg_match('/\p{Arabic}/u', $array[$i]);
if($checkLang == 1){
++$arabicCount;
} else{
++$englishCount;
}
}
if($arabicCount >= $englishCount){
// Return 1 means TRUE i-e Arabic
return 1;
} else{
// Return 0 means FALSE i-e English
return 0;
}
}
PHP Text_LanguageDetect library có thể phát hiện 52 ngôn ngữ. Nó được kiểm tra đơn vị và cài đặt thông qua nhà soạn nhạc và PEAR.
- 1. In chuỗi tiếng ả rập trong java
- 2. Solr cho tiếng Ả Rập
- 3. Cách xác định chuỗi là tiếng Anh hoặc tiếng Ả Rập?
- 4. Dải ký tự không phải chữ và số từ tiếng Ả Rập UTF8 + Chuỗi tiếng Anh
- 5. Văn bản tiếng Ả Rập trong as3
- 6. Có cách nào để lưu trữ ngày tiếng Ả Rập với Postgres không?
- 7. 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?
- 8. Lỗi khi writting tiếng Ả Rập để hình ảnh
- 9. Xóa ký tự rác trong tiếng Ả Rập
- 10. Làm thế nào để chèn ký tự tiếng Ả Rập vào cơ sở dữ liệu sql?
- 11. Cách lấy bàn phím tiếng Ả Rập trong iphone sdk
- 12. PHP Phát hiện nếu không phải là tiếng Anh
- 13. 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?
- 14. Chèn & Chọn dữ liệu tiếng Ả Rập Android SQLite
- 15. Làm cách nào để chuyển đổi chữ số tiếng Anh sang chữ số Ả Rập?
- 16. Làm thế nào để kiểm tra xem bất kỳ ký tự tiếng Ả Rập tồn tại trong chuỗi (javascript)
- 17. Sắp xếp các từ tiếng Ả Rập trong Java
- 18. Mã hóa các từ tiếng Ả Rập bằng NLTK
- 19. Phân tích cú pháp XML tiếng Ả Rập trong Android
- 20. Thư viện OCR nguồn mở cho tiếng Ả Rập
- 21. Ngôn ngữ Ả Rập Android
- 22. Sử dụng Eclipse với tiếng Ả Rập và tiếng Anh trên cùng một dòng
- 23. iphone sdk: làm thế nào để chuyển đổi định dạng ngày tiếng Ả Rập sang tiếng Anh?
- 24. vấn đề với mệnh đề WHERE khớp với chuỗi tiếng Ả Rập
- 25. Bộ chọn ngày lịch Hijri (tiếng Ả Rập) sử dụng PHP hoặc Javascript
- 26. Làm thế nào quan trọng là phản ánh giao diện người dùng _entire_ cho người nói tiếng Ả Rập?
- 27. 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
- 28. Làm thế nào để làm cho cơ sở dữ liệu Mysql hỗ trợ ngôn ngữ tiếng Ả Rập?
- 29. Gương Ả Rập về vấn đề bố cục trong Android
- 30. URDU hoặc Hỗ trợ tiếng Ả Rập trong Android cho trình giả lập và thiết bị
Tôi cho rằng bạn có nghĩa là chữ viết tiếng Ả Rập, chứ không phải là tiếng Ả Rập? Có một sự khác biệt lớn. – Rushyo
Nếu chuỗi chứa các từ từ nhiều ngôn ngữ thì sao? Ví dụ: 私 không عرب – Lukman