Hiển thị các bài đăng có nhãn php. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn php. Hiển thị tất cả bài đăng

Thứ Sáu, 29 tháng 7, 2011

Translate với bing

Hiện nay việc dùng đa ngôn ngữ trong các website là một điều tất yếu,với các phần ngôn ngữ tĩnh thì bạn bỏ thời gian ra dịch là một điều hợp lý,nhưng với các nội dung động thì không hẳn lúc nào bạn cũng có một đội ngũ ngồi dịch những nội dung này.Vì vậy việc áp dụng các công cụ tự động dịch các nội dung này sẽ giúp bạn tiết kiệm nhiều thời gian và tiền bạc :D .Nhưng nó cũng có mặt hạn chế là câu cú và nội dung dịch còn sai nhiều,nhưng nhìn chung người đọc vẫn hiểu được nội dung bài viết của bạn nói vè cái gì :D .
Trước hết để sử dụng được bing translate bạn cần vào link sau  để dăng ký một appID. http://www.bing.com/developers/createapp.aspx
$appId = “*********1F2C7EE5EE7D5A85F59D43C”; //thay thế bằng appId của bạn vừa đăng ký
$from = “en”; //ngôn ngữ gốc
$to = “fr”; //ngôn ngữ cần dịch
$text = “chuỗi cần dịch”;
$detectUri = “http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=”.$appId.”&text=”.$text.”&from=”.$from.”&to=”.$to; //link trả về kết quả translate.
Giờ nhiệm vụ của bạn hết sức đơn giản dùng file_get_contents hoặc curl,.. để get nội dung translate về
vd :file_get_contents($detectUri);
Lưu ý: vì việc translate truyền dưới dạng url lên bạn cần phải sử lý dữ liệu truyền lên url một chút để link không bị lỗi do một số ký tự đặc biệt.
mình tạm thời dung cái này:
$text = preg_replace(“/[^a-zA-Z 0-9.,;\=\-\_\'\"\<\>:\\ \/]+/”,” “,$text);
$text = preg_replace(“/[ ]+/”,”+”,$text);
các thẻ trả về sẽ bị chuyển thành &lt; ,…
bạn cần replace chúng
$content = str_replace(array(“&lt;”,”&gt;”), array(“<”,”>”), file_get_contents($detectUri));
Dữ liệu trả về sẽ bị bao bọc bởi thẻ
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/"></string>
bạn chỉ cần remove nó đi là xài được :D
$content = strip_tags($content,"<br><p><b><i><a><img>"); dung tạm cái này vì lười viết
regexp :D  bạn liệt kê những thẻ muốn giũ lại là được :D
ok vậy là nội dung translate đã khá sạch sẽ,bạn chỉ cần insert và database là ok 

Thứ Năm, 28 tháng 7, 2011

Giảm độ lớn của INDEX trong MySQL

Hi All,
Trong quá trình tìm giải pháp cho vấn đề của mình, bắt được một bài viết khá hay ở đây:
http://kevin.vanzonneveld.net/techblog/article/create_short_ids_with_php_like_youtube_or_tinyurl
Đây là bài viết nói về cách làm giảm chiều dài của ID trên URL (giống như của YouTube).
Tuy cái này hay, nhưng chưa giúp mình trong việc giải quyết vấn đề sau đây.
Mình có một CSDL các sản phẩm (khoảng 1 tỉ). Khi INSERT một sản phẩm mới, mình muốn kiểm tra xem tên sản phẩm này có trong CSDL hay chưa.
Nếu sử dụng Zend Lucene hoặc MySQL Index thì dung lượng index khá là lớn. Vì vậy mình muốn HASH các tên sản phẩm vào một trường khác với chiều dài nhỏ hơn.
Khi so sánh tên sản phẩm thì sử dụng HASH CODE này.
Giải pháp của mình là sử dụng mã md5 raw, với chiều dài là 16 bytes. Với 1 tỉ records thì nó ngốn xấp xỉ 15 GB.
Mình chấp nhận khả năng trùng lặp ở một số trường hợp.
Tuy nhiên mình muốn giảm chiều dài của HASH CODE xuống nữa thì nên sử dụng biện pháp gì.  Mình chấp nhận khả năng bị trùng lặp nhiều hơn (tức là có 2 sản phẩm khác tên nhưng hashcode có thể vẫn giống nhau)?
Bởi vì mình nghĩ có 1 tỉ item, vẫn chỉ là INT(11) = 4 bytes, xài 16 bytes thì … thấy hơi phí. Nếu có giải pháp giúp mình giảm xuống 8 bytes thì tốt nhất :D