thai

หลังจากที่งม CakePHP มาได้สักพัก ได้ blog entry  เขียนเป็น blog สั้นๆ แต่มาเป็นชุดแล้ว เขียนง่ายกว่า เขียนแล้วไม่งงเอง. ทีแรกกะเขียนทีเดียวยาวเลยไม่ไหว -_-!.

แต่ว่าเขียนสั้นๆ แล้วก็ก็มีปัญหานิดๆ คืออาจจะไป flood planet ได้ ทั้งๆที่เกี่ยวกับ GNU/Linux นิดเดียว (ตอนใช้ command line). ต่อไปก็กะว่าจะไม่เอาเรื่อง CakePHP feed เข้าไปแล้ว.  ก็เลยต้องมีโฆษณาสักหนักว่าถ้าหากต้องการติดตามเรื่อง CakePHP ที่ไม่ค่อยเกี่ยวกับ GNU/Linux และ Ubuntu เท่าไหร่ ก็สามารถติดตามได้ที่ http://blog.vee-u.com/tag/cakephp/.ผมก็ใช้ Ubuntu ถ้าจะใช้ tutorial กับ Windows ก็คาดว่าน่าจะต้องแก้อะไรนิดๆ หน่อยๆ . Mac OS X ก็อาจจะคล้ายๆ กันแต่ก็อาจจะต้องปรับๆ บ้างอยู่ดี.

update: ป๋าเทพบอกว่า blog entry เกี่ยวกับ cakephp ไม่น่าจะเป็นการ flood planet

edit @ 23 Apr 2008 15:48:48 by veer

sudo setxkbmap us,th -option grp:alt_shift_toggle
อ้างอิง: http://en.wikibooks.org/wiki/FOSS_Localization

หรือถ้าจะเข้าไปดูตัวอย่าง setxkbmap เลยก็ที่หน้านี้

ป.ล. เปลี่ยนแหล่งอ้างอิงตามป๋าเทพบอก ลิงก์ไปที่ที่ควรน่าจะทำให้ pagerank และคนที่เข้ามาอ่านได้ประโยชน์ด้วย ขอบคุณครับ :-).


edit @ 2007/08/18 17:27:18

ปกติการ search ภาษาไทย บน search engine อย่าง Yahoo หรือ Google ก็ใช้ได้ทั้งคู่ แต่ว่าก็ยังมีปัญหาอยู่ว่า ถ้าคำเขียนติดกันๆ Google จะหาไม่เคยเจอเท่าไหร่

สมมุติใช้ คำค้นว่า "อนาธิปไตย" แต่ search engine ไปเจอข้อความว่า "ในฐานะนักปัจเจกอนาธิปไตยคนหนึ่ง" ก็มักจะหาไปเจอ แต่ว่า ถ้าไปเจอ "อนาธิปไตย คือ ..." มีเว้นวรรคสักหน่อยก็จะหาเจอ

ผมก็เลยมาลองดูว่าเป็นแบบนั้นอยู่หรือเปล่า โดยใช้คำค้นว่า "site:thaingo.org ราชาธิปไตย"

ลองที่ Google ก่อน

ก็ออกมาตามคาดเจอ entry เดียว ที่มีคำว่า ราชาธิปไตย อยู่โดดๆ

 

คราวนี้มาลอง Yahoo มั่ง


ผิดคาดครับ ดูเหมือน Yahoo จะหาภาษาไทยแบบตัดคำได้แล้ว แบบนี้คนที่ใช้ภาษาไทยก็คงหาข้อมูลสะดวกสบาย ครอบคลุมเว็บต่างๆขึ้นเยอะ (แต่ก่อนบางเว็บหาไม่เจอ เพราะคำที่เราใช้หาไม่ปรากฎอยู่โดดๆเลย)

ถ้าใครจะทำ search engine ภาษาไทย มาแข่งกับ Google และเน้นจุดแข็งที่ว่าตัดคำได้ มันก็อาจจะสายไปแล้ว


edit @ 2007/04/26 12:32:26
edit @ 2007/04/26 12:32:31
จากประกาศการเปลี่ยนแปลง ใน Lucene 2.1 บัดนี้ Lucene ก็สามารถ search ภาษาโดยตัดคำให้ด้วยได้แล้ว โดยที่ไม่ต้องเล่นท่าเอา nightly build มาใส่ สำหรับ Nutch ก็รอให้ใช้ Lucene 2.1 แล้วอีกไม่นานก็คงใช้ภาษาไทยได้อย่างเป็นทางการเหมือนกัน :-)

New features

1. LUCENE-503: New ThaiAnalyzer and ThaiWordFilter in contrib/analyzers
(Samphan Raruenrom via Chris Hostetter)





edit @ 2007/03/16 16:07:45
edit @ 2007/03/22 14:48:48

เริ่มจากลบ Lucene ออกจาก dspace ก่อนเลย

rm -f lib/lucene*

แลัว copy lucene จาก nightly build มาใส่แทน

lucene-analyzers-nightly.jar lucene-core-nightly.jar

จากนั้นก็ apply patch นี้

diff -Nuar dspace-1.4.1-source.orig/src/org/dspace/search/DSAnalyzer.java dspace-1.4.1-source.thai/src/org/dspace/search/DSAnalyzer.java
--- dspace-1.4.1-source.orig/src/org/dspace/search/DSAnalyzer.java 2005-04-20 21:23:23.000000000 +0700
+++ dspace-1.4.1-source.thai/src/org/dspace/search/DSAnalyzer.java 2007-03-08 21:50:58.000000000 +0700
@@ -48,50 +48,14 @@
import org.apache.lucene.analysis.StopFilter;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardFilter;
+import org.apache.lucene.analysis.th.ThaiAnalyzer;
+

/**
* Custom Lucene Analyzer that combines the standard filter, lowercase filter,
* stemming and stopword filters.
*/
-public class DSAnalyzer extends Analyzer
+public class DSAnalyzer extends ThaiAnalyzer
{
- /*
- * An array containing some common words that are not usually useful for
- * searching.
- */
- private static final String[] STOP_WORDS =
- {
-
- // new stopwords (per MargretB)
- "a", "am", "and", "are", "as", "at", "be", "but", "by", "for",
- "if", "in", "into", "is", "it", "no", "not", "of", "on", "or",
- "the", "to", "was"
- // old stopwords (Lucene default)
- /*
- * "a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in",
- * "into", "is", "it", "no", "not", "of", "on", "or", "s", "such", "t",
- * "that", "the", "their","then", "there","these", "they", "this", "to",
- * "was", "will", "with"
- */
- };
-
- /*
- * Stop table
- */
- final static private Set stopSet = StopFilter.makeStopSet(STOP_WORDS);
-
- /*
- * Create a token stream for this analyzer.
- */
- public final TokenStream tokenStream(String fieldName, final Reader reader)
- {
- TokenStream result = new DSTokenizer(reader);
-
- result = new StandardFilter(result);
- result = new LowerCaseFilter(result);
- result = new StopFilter(result, stopSet);
- result = new PorterStemFilter(result);

- return result;
- }
}

แล้วก็ build ใหม่

ant -Dconfig=/dspace/config/dspace.cfg update

เอา .war ไปวางก็ใช้ได้

 

สิ่งที่ patch ไปมันแบบสกปรกๆ สักว่าให้เสร็จอะนะ แต่คงเป็นการกุยกรุยทางไปสู่สิ่งที่ดีๆกว่าได้

ป.ล. เวลาพูดกับผมขอให้ออกเสียง ร. ชัดๆด้วยนะครับ ไม่งั้นผมจำมาเขียนผิดนะ :-P (ล้อเล่นๆ)


edit @ 2007/03/14 11:55:24
เนื่องจาก Nutch ถ้าไม่ระบุภาษาขณะที่ search ว่าเป็นภาษาไทย มันจะไม่ตัดคำให้ ผมก็เลยไปแก้ code ไป force ให้เป็นภาษาไทยเลย ซึ่งออกจะเป็นวิธีที่แย่ๆ แต่ว่าพอถูกไถใช้ไปได้


Index: jsp/search.jsp
===================================================================
--- jsp/search.jsp (revision 504050)
+++ jsp/search.jsp (working copy)
@@ -106,8 +106,9 @@
int hitsToCluster = HITS_TO_CLUSTER; // number of hits to cluster

// get the lang from request
- String queryLang = request.getParameter("lang");
- if (queryLang == null) { queryLang = ""; }
+ //String queryLang = request.getParameter("lang");
+ //if (queryLang == null) { queryLang = ""; }
+ String queryLang = "th"; //FIXME: Thai workaround
Query query = Query.parse(queryString, queryLang, nutchConf);
bean.LOG.info("query: " + queryString);
bean.LOG.info("lang: " + queryLang);
Index: jsp/explain.jsp
===================================================================
--- jsp/explain.jsp (revision 504050)
+++ jsp/explain.jsp (working copy)
@@ -35,7 +35,9 @@
HitDetails details = bean.getDetails(hit);
// get the lang from request
// get the lang from request
- String queryLang = request.getParameter("lang");
+ //String queryLang = request.getParameter("lang");
+ String queryLang = "th"; // Thai workaround
+
if (queryLang == null) { queryLang = ""; }
Query query = Query.parse(request.getParameter("query"), queryLang, nutchConf);
String language =



และอีกไฟล์


Index: org/apache/nutch/searcher/OpenSearchServlet.java
===================================================================
--- org/apache/nutch/searcher/OpenSearchServlet.java (revision 504050)
+++ org/apache/nutch/searcher/OpenSearchServlet.java (working copy)
@@ -84,7 +84,8 @@
String urlQuery = URLEncoder.encode(queryString, "UTF-8");

// the query language
- String queryLang = request.getParameter("lang");
+ //String queryLang = request.getParameter("lang");
+ String queryLang = "th"; //FIXME: Wordaround

int start = 0; // first hit to display
String startString = request.getParameter("start");


จริงๆก็งงว่าต้องแก้ไฟล์ไหนบ้างก็แก้ไปหมดเลยที่มี queryLang

[ สืบเนื่องมากจาก ตอนที่ 1 Thai Analyzer ]


edit @ 2007/02/10 21:34:49

Nutch (search engine) + ภาษาไทย

posted on 07 Feb 2007 16:12 by veer
ผมลองเอา Nutch ที่เป็น search engine ในโครงการ Apache Lucene ที่มีทั้ง web crawler, indexer, searcher และ web interface ในตัว มาลองใช้ดู ปรากฎว่ามันใช้ภาษาไทยไม่ค่อยจะได้ ปัญหาในจุดแรกเลยก็คือ indexer ซึ่งก็แก้ได้เลยการสร้าง Thai Analyzer Plugin สำหรับ indexer ขึ้นมา โดยเอา French Analyzer Plugin (ที่ไปเรียก French Analyzer Plugin ใน Lucene) มาแก้อีกที

ไม่รู้จะ upload patch ไว้ที่ไหนผมเลยเปิด issue ใหม่ใน JIRA เลย https://issues.apache.org/jira/browse/NUTCH-441 เข้าไปโหลดได้เลยนะครับ

มีปัญหานิดหน่อยว่า ต้องใช้ lucene-analyzers-nightly.jar แทน lucene-analyzers-2.0.0 เพราะว่า lucene 2.0.0 ยังไม่มี Thai Analyzer ผมก็ copy มาทับซะก็เป็นอันใช้ได้

แต่ว่าเจอปัญหาอีกนิดคือมันใส่ lang=en ใน URL ให้อัตโนมัติ ถ้าแก้แบบเฉพาะหน้าก็ใช้ lang=th ไปแทนก็ใช้ได้ :-P

edit @ 2007/02/07 22:05:40
edit @ 2007/02/08 16:50:03
edit @ 2007/02/08 17:43:26

python book

ผมมีปัญหาเหลือเกินว่า ไพธอนก็เป็นภาษาที่ดีใช้ง่าย แต่พอชาวบ้านจะใช้ด้วยเขาก็บ่นก็ว่าไม่มีตำหรับ ตำรา ภาษาไทยราคาสมเหตุสมผล ให้หามาอ่านเลย ผมก็เคยคิดจะเขียนเองเหมือนกันนะ แต่มันก็ได้แค่อะไรนิดหน่อยๆ

วันก่อนไปดูหนังสือร้านนายอินทร์ที่เดอะมอลก็มาเจอเล่นนี้เข้าพอดี เล่มนี้โดยอ.จักรกฤษณ์ ถือว่าเป็นตำราไพธอนภาษาไทยที่เป็นกระดาษและจำหน่ายในวงกว้าง เล่มแรกเลยทีเดียว (บนเวบมีของคุณสุกรีเขียนไว้ที่ howforge และ ford antitrust ทำรายงานส่งอาจารย์มาแล้ว) ที่ผ่านมาผมประทับใจคุณภาพของหนังสือของส.ส.ท.มาโดยตลอด ดังนั้งจึงเดาๆเอาว่าเล่มนี้ก็น่าจะดีด้วย แต่ก็ยังไม่ได้อ่านละเอียด ราคาก็ไม่แพงจนเกินไป 350 บาท สำหรับผมก็สมเหตุสมผลนะ

เดี๋ยวคงไปถามชาวบ้านก่อนว่าสนใจหรือเปล่า ถ้าสนใจอาจจะหาวิธีจัดซื้อมาไว้ที่ lab ซักเล่ม

ขอบคุณอ.จักรกฤษณ์ (ผู้แต่งหนังสือ และผู้ถ่ายภาพ) ที่อนุญาตให้ใช้ภาพ และที่เขียนหนังสือดีๆ(แบบที่ผมต้องการ)ออกมานะครับ ขอบคุณส.ส.ท.ด้วยที่ช่วยพิมพ์ออกมาขาย

ป.ล. เรื่องซ้ำกับที่ http://vee-r.blogspot.com/ นะ ขออภัยชาว TLWG Planet ด้วย

edit @ 2006/11/08 17:52:28