Return-Path: Delivered-To: apmail-lucene-java-commits-archive@www.apache.org Received: (qmail 60571 invoked from network); 5 Aug 2009 18:22:45 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 5 Aug 2009 18:22:45 -0000 Received: (qmail 56769 invoked by uid 500); 5 Aug 2009 18:22:53 -0000 Delivered-To: apmail-lucene-java-commits-archive@lucene.apache.org Received: (qmail 56696 invoked by uid 500); 5 Aug 2009 18:22:52 -0000 Mailing-List: contact java-commits-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: java-dev@lucene.apache.org Delivered-To: mailing list java-commits@lucene.apache.org Received: (qmail 56687 invoked by uid 99); 5 Aug 2009 18:22:52 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 05 Aug 2009 18:22:52 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 05 Aug 2009 18:22:43 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 011E4238886D; Wed, 5 Aug 2009 18:22:23 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: svn commit: r801348 - in /lucene/java/trunk/contrib: ./ analyzers/common/src/java/org/apache/lucene/analysis/ar/ analyzers/common/src/resources/org/apache/lucene/analysis/ar/ analyzers/common/src/test/org/apache/lucene/analysis/ar/ Date: Wed, 05 Aug 2009 18:22:22 -0000 To: java-commits@lucene.apache.org From: rmuir@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090805182223.011E4238886D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: rmuir Date: Wed Aug 5 18:22:22 2009 New Revision: 801348 URL: http://svn.apache.org/viewvc?rev=801348&view=rev Log: LUCENE-1758: Update ArabicAnalyzer to light10 stemming, stopwords improvements, lowercase non-arabic text Modified: lucene/java/trunk/contrib/CHANGES.txt lucene/java/trunk/contrib/analyzers/common/src/java/org/apache/lucene/analysis/ar/ArabicAnalyzer.java lucene/java/trunk/contrib/analyzers/common/src/java/org/apache/lucene/analysis/ar/ArabicStemmer.java lucene/java/trunk/contrib/analyzers/common/src/resources/org/apache/lucene/analysis/ar/stopwords.txt lucene/java/trunk/contrib/analyzers/common/src/test/org/apache/lucene/analysis/ar/TestArabicAnalyzer.java lucene/java/trunk/contrib/analyzers/common/src/test/org/apache/lucene/analysis/ar/TestArabicStemFilter.java Modified: lucene/java/trunk/contrib/CHANGES.txt URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/CHANGES.txt?rev=801348&r1=801347&r2=801348&view=diff ============================================================================== --- lucene/java/trunk/contrib/CHANGES.txt (original) +++ lucene/java/trunk/contrib/CHANGES.txt Wed Aug 5 18:22:22 2009 @@ -8,6 +8,12 @@ number conversion. You'll need to fully re-index any previously created indexes. This isn't a break in back-compatibility because local Lucene has not yet been released. (Mike McCandless) + + 2. LUCENE-1758: ArabicAnalyzer now uses the light10 algorithm, has a refined + default stopword list, and lowercases non-Arabic text. + You'll need to fully re-index any previously created indexes. This isn't a + break in back-compatibility because ArabicAnalyzer has not yet been + released. (Robert Muir) API Changes Modified: lucene/java/trunk/contrib/analyzers/common/src/java/org/apache/lucene/analysis/ar/ArabicAnalyzer.java URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/analyzers/common/src/java/org/apache/lucene/analysis/ar/ArabicAnalyzer.java?rev=801348&r1=801347&r2=801348&view=diff ============================================================================== --- lucene/java/trunk/contrib/analyzers/common/src/java/org/apache/lucene/analysis/ar/ArabicAnalyzer.java (original) +++ lucene/java/trunk/contrib/analyzers/common/src/java/org/apache/lucene/analysis/ar/ArabicAnalyzer.java Wed Aug 5 18:22:22 2009 @@ -27,6 +27,7 @@ import java.util.Set; import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.analysis.LowerCaseFilter; import org.apache.lucene.analysis.StopFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.WordlistLoader; @@ -36,10 +37,9 @@ *

* This analyzer implements light-stemming as specified by: * - * Improving Stemming for Arabic Information Retrieval: - * Light Stemming and Co-occurrence Analysis + * Light Stemming for Arabic Information Retrieval * - * http://ciir.cs.umass.edu/pubfiles/ir-249.pdf + * http://www.mtholyoke.edu/~lballest/Pubs/arab_stem05.pdf *

* The analysis package contains three primary components: *

    @@ -109,12 +109,13 @@ /** * Creates a TokenStream which tokenizes all the text in the provided Reader. * - * @return A TokenStream build from a StandardTokenizer filtered with - * StandardFilter, StopFilter, ArabicNormalizationFilter and ArabicStemFilter. + * @return A TokenStream build from an ArabicTokenizer filtered with + * StopFilter, LowerCaseFilter, ArabicNormalizationFilter and ArabicStemFilter. */ public final TokenStream tokenStream(String fieldName, Reader reader) { TokenStream result = new ArabicLetterTokenizer( reader ); result = new StopFilter( result, stoptable ); + result = new LowerCaseFilter(result); result = new ArabicNormalizationFilter( result ); result = new ArabicStemFilter( result ); Modified: lucene/java/trunk/contrib/analyzers/common/src/java/org/apache/lucene/analysis/ar/ArabicStemmer.java URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/analyzers/common/src/java/org/apache/lucene/analysis/ar/ArabicStemmer.java?rev=801348&r1=801347&r2=801348&view=diff ============================================================================== --- lucene/java/trunk/contrib/analyzers/common/src/java/org/apache/lucene/analysis/ar/ArabicStemmer.java (original) +++ lucene/java/trunk/contrib/analyzers/common/src/java/org/apache/lucene/analysis/ar/ArabicStemmer.java Wed Aug 5 18:22:22 2009 @@ -47,6 +47,7 @@ ("" + BEH + ALEF + LAM).toCharArray(), ("" + KAF + ALEF + LAM).toCharArray(), ("" + FEH + ALEF + LAM).toCharArray(), + ("" + LAM + LAM).toCharArray(), ("" + WAW).toCharArray(), }; Modified: lucene/java/trunk/contrib/analyzers/common/src/resources/org/apache/lucene/analysis/ar/stopwords.txt URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/analyzers/common/src/resources/org/apache/lucene/analysis/ar/stopwords.txt?rev=801348&r1=801347&r2=801348&view=diff ============================================================================== --- lucene/java/trunk/contrib/analyzers/common/src/resources/org/apache/lucene/analysis/ar/stopwords.txt (original) +++ lucene/java/trunk/contrib/analyzers/common/src/resources/org/apache/lucene/analysis/ar/stopwords.txt Wed Aug 5 18:22:22 2009 @@ -5,75 +5,39 @@ ا أ ، -عشر عبد -عدد -عدة -عشرة عدم عام عاما -عرفات عن عند -عمان عندما على -علي عليه عليها -عملية -زيارة -سبتمبر -ساراييفو -سنة -سوريا -سنوات -تشرين تم -تموز ضد بعد بعض اعادة اعلن اعلنت -حزب -حزيران بسبب -اسرائيل -حسين حتى اتفاق -صرب اذا احد اثر -غزة -برس -باسم اجتماع -غدا -شخصا -صباح اطار اربعة -بغداد اخرى -باريس -رابين -شرق بان ابو اجل غير -حركة -رئيس -جديدة اطلاق بشكل -بطولة -صحيفة حاليا بن به @@ -84,166 +48,40 @@ اي بها جهة -صفر حيث اكد الا اما -العسكرية -العراق -العاصمة -العربية -العراقي -العراقية العام -العالم -العلاقات -العمل -امس -السعودية -الساعة -السبت السابق -روسيا -السلطة -السلطات السلام التعاون -التحرير التى التي -اكتوبر -دورة اكثر -ايار ايضا -الجزائر -حماس -الاسرائيلي -الاسرائيلية -الاسبوع -الاسلحة -الاسلامية -ذكرت -الاتحاد -الاتفاق -ثلاثة -الحرب -الاحد الذاتي -الشرطة -الاربعاء -الغربية -الخارجية -الاردن -الشرق -ايران -الحدود -الرئيس الاخيرة الثاني الثانية -الاثنين -شمال -بيان -دمشق الذى الذي الان -امام -ايام خلال -الشيخ -الجيش -الدور -الضفة -الجمعة -بيريز -الاوسط -الروسي -البوسنة -الروسية -بيروت -الانتخابات -البلاد -الدفاع -الثلثاء -الانباء -الثلاثاء -الاوروبي حوالى الذين -الدول الحكم -الامم -الامن الاول -الدولة -الخليج -الخميس -الاميركي -الاميركية -الدولي الاولى -الدولية -الحكومة بين ذلك -دول -دون -حول -حين -الف الى انه -اول ضمن -جنوب -دولة انها جميع -الوزراء -المتحدث -المتحدة -دولار -النار -الوضع -القدس -المحتلة -المصدر -المباراة -المصري الماضي -المصرية -المرحلة -القدم -اللجنة -المجلس -الفرنسي -الفرنسية -القاهرة -المدينة -المانيا -الوطنية -المجموعة -الله -الفلسطيني -الفلسطينية -الفلسطينيين -الوقت -المقرر -القوات -النهائي المقبل -المنطقة -الولايات -المفاوضات -الملك -اليمن -اليوم -ايلول -الكويت -ـ ف و و6 @@ -251,48 +89,19 @@ لا ما مع -وزارة -وزير -مساء -قتل -كرة -مصر هذا -فاز -كأس -ياسر -قرار -مصدر -واحد -قطاع -مصادر -مباراة -مبارك واضاف واضافت -فرانس -واشنطن فان قبل -قال كان لدى نحو هذه وان -محمد -واكد يذكر -مجلس -فرنسا -كريستوفر كانت واوضح -لبنان -مايو -مدينة -مجموعة -كانون فى في كل @@ -302,49 +111,51 @@ من هو هي -قوة كما لها منذ -وقد ولا -نفسه -موسكو -مقتل -لقاء -لكرة -نقطة -قوات مقابل -لندن هناك -وقال وكان -منطقة -منظمة -نهاية -وكالة -وقالت وكانت -للامم فيه -كلم لكن وفي -وقف ولم ومن وهو وهي -يوم فيها منها -مليار -لوكالة يكون -يمكن -كلينتون -مليون -يوليو -يونيو -نيويورك +أخرى +إذا +أربعة +إطار +إعادة +أعلن +أعلنت +أف +أكثر +أكد +إلا +الأخيرة +الآن +الأول +الأولى +إلى +أما +أن +إن +إنه +أنه +أنها +إنها +أو +اى +أي +أى +أيضا +بأن +فإن Modified: lucene/java/trunk/contrib/analyzers/common/src/test/org/apache/lucene/analysis/ar/TestArabicAnalyzer.java URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/analyzers/common/src/test/org/apache/lucene/analysis/ar/TestArabicAnalyzer.java?rev=801348&r1=801347&r2=801348&view=diff ============================================================================== --- lucene/java/trunk/contrib/analyzers/common/src/test/org/apache/lucene/analysis/ar/TestArabicAnalyzer.java (original) +++ lucene/java/trunk/contrib/analyzers/common/src/test/org/apache/lucene/analysis/ar/TestArabicAnalyzer.java Wed Aug 5 18:22:22 2009 @@ -17,6 +17,12 @@ * limitations under the License. */ +import java.io.StringReader; + +import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.analysis.TokenStream; +import org.apache.lucene.analysis.tokenattributes.TermAttribute; + import junit.framework.TestCase; /** @@ -31,6 +37,48 @@ new ArabicAnalyzer(); } - /* TODO: more tests */ + /** + * Some simple tests showing some features of the analyzer, how some regular forms will conflate + */ + public void testBasicFeatures() throws Exception { + ArabicAnalyzer a = new ArabicAnalyzer(); + assertAnalyzesTo(a, "كبير", new String[] { "كبير" }); + assertAnalyzesTo(a, "كبيرة", new String[] { "كبير" }); // feminine marker + + assertAnalyzesTo(a, "مشروب", new String[] { "مشروب" }); + assertAnalyzesTo(a, "مشروبات", new String[] { "مشروب" }); // plural -at + + assertAnalyzesTo(a, "أمريكيين", new String[] { "امريك" }); // plural -in + assertAnalyzesTo(a, "امريكي", new String[] { "امريك" }); // singular with bare alif + + assertAnalyzesTo(a, "كتاب", new String[] { "كتاب" }); + assertAnalyzesTo(a, "الكتاب", new String[] { "كتاب" }); // definite article + + assertAnalyzesTo(a, "ما ملكت أيمانكم", new String[] { "ملكت", "ايمانكم"}); + assertAnalyzesTo(a, "الذين ملكت أيمانكم", new String[] { "ملكت", "ايمانكم" }); // stopwords + } + + /** + * Non-arabic text gets treated in a similar way as SimpleAnalyzer. + */ + public void testEnglishInput() throws Exception { + assertAnalyzesTo(new ArabicAnalyzer(), "English text.", new String[] { + "english", "text" }); + } + + private void assertAnalyzesTo(Analyzer a, String input, String[] output) + throws Exception { + TokenStream ts = a.tokenStream("dummy", new StringReader(input)); + TermAttribute termAtt = (TermAttribute) ts + .getAttribute(TermAttribute.class); + + for (int i = 0; i < output.length; i++) { + assertTrue(ts.incrementToken()); + assertEquals(output[i], termAtt.term()); + } + + assertFalse(ts.incrementToken()); + ts.close(); + } } Modified: lucene/java/trunk/contrib/analyzers/common/src/test/org/apache/lucene/analysis/ar/TestArabicStemFilter.java URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/analyzers/common/src/test/org/apache/lucene/analysis/ar/TestArabicStemFilter.java?rev=801348&r1=801347&r2=801348&view=diff ============================================================================== --- lucene/java/trunk/contrib/analyzers/common/src/test/org/apache/lucene/analysis/ar/TestArabicStemFilter.java (original) +++ lucene/java/trunk/contrib/analyzers/common/src/test/org/apache/lucene/analysis/ar/TestArabicStemFilter.java Wed Aug 5 18:22:22 2009 @@ -50,6 +50,10 @@ check("فالحسن", "حسن"); } + public void testLlPrefix() throws IOException { + check("للاخر", "اخر"); + } + public void testWaPrefix() throws IOException { check("وحسن", "حسن"); }