You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sa...@apache.org on 2010/09/28 08:16:18 UTC
svn commit: r1002032 [5/9] - in /lucene/dev/trunk:
lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/quality/
modules/analysis/ modules/analysis/common/
modules/analysis/common/src/java/org/apache/lucene/analysis/bg/
modules/analysis/common...
Added: lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestUAX29Tokenizer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestUAX29Tokenizer.java?rev=1002032&view=auto
==============================================================================
--- lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestUAX29Tokenizer.java (added)
+++ lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestUAX29Tokenizer.java Tue Sep 28 06:16:16 2010
@@ -0,0 +1,204 @@
+package org.apache.lucene.analysis.core;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.BaseTokenStreamTestCase;
+import org.apache.lucene.analysis.Tokenizer;
+import org.apache.lucene.analysis.standard.UAX29Tokenizer;
+import org.apache.lucene.analysis.util.ReusableAnalyzerBase;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.Arrays;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+public class TestUAX29Tokenizer extends BaseTokenStreamTestCase {
+
+ public void testHugeDoc() throws IOException {
+ StringBuilder sb = new StringBuilder();
+ char whitespace[] = new char[4094];
+ Arrays.fill(whitespace, ' ');
+ sb.append(whitespace);
+ sb.append("testing 1234");
+ String input = sb.toString();
+ UAX29Tokenizer tokenizer = new UAX29Tokenizer(new StringReader(input));
+ BaseTokenStreamTestCase.assertTokenStreamContents(tokenizer, new String[] { "testing", "1234" });
+ }
+
+ private Analyzer a = new ReusableAnalyzerBase() {
+ @Override
+ protected TokenStreamComponents createComponents
+ (String fieldName, Reader reader) {
+
+ Tokenizer tokenizer = new UAX29Tokenizer(reader);
+ return new TokenStreamComponents(tokenizer);
+ }
+ };
+
+ public void testArmenian() throws Exception {
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "ÕÕ«ÖÕ«ÕºÕ¥Õ¤Õ«Õ¡ÕµÕ« 13 Õ´Õ«Õ¬Õ«Õ¸Õ¶ Õ°Õ¸Õ¤Õ¾Õ¡Õ®Õ¶Õ¥ÖÕ¨ (4,600` Õ°Õ¡ÕµÕ¥ÖÕ¥Õ¶ Õ¾Õ«ÖÕ«ÕºÕ¥Õ¤Õ«Õ¡ÕµÕ¸ÖÕ´) Õ£ÖÕ¾Õ¥Õ¬ Õ¥Õ¶ Õ¯Õ¡Õ´Õ¡Õ¾Õ¸ÖÕ¶Õ¥ÖÕ« Õ¯Õ¸Õ²Õ´Õ«Ö Õ¸Ö Õ°Õ¡Õ´Õ¡ÖÕµÕ¡ Õ¢Õ¸Õ¬Õ¸Ö Õ°Õ¸Õ¤Õ¾Õ¡Õ®Õ¶Õ¥ÖÕ¨ Õ¯Õ¡ÖÕ¸Õ² Õ§ ÕÕ´Õ¢Õ¡Õ£ÖÕ¥Õ¬ ÖÕ¡Õ¶Õ¯Õ¡Ö Õ´Õ¡ÖÕ¤ Õ¸Õ¾ Õ¯Õ¡ÖÕ¸Õ² Õ§ Õ¢Õ¡ÖÕ¥Õ¬ ÕÕ«ÖÕ«ÕºÕ¥Õ¤Õ«Õ¡ÕµÕ« Õ¯Õ¡ÕµÖÕ¨Ö",
+ new String[] { "ÕÕ«ÖÕ«ÕºÕ¥Õ¤Õ«Õ¡ÕµÕ«", "13", "Õ´Õ«Õ¬Õ«Õ¸Õ¶", "Õ°Õ¸Õ¤Õ¾Õ¡Õ®Õ¶Õ¥ÖÕ¨", "4,600", "Õ°Õ¡ÕµÕ¥ÖÕ¥Õ¶", "Õ¾Õ«ÖÕ«ÕºÕ¥Õ¤Õ«Õ¡ÕµÕ¸ÖÕ´", "Õ£ÖÕ¾Õ¥Õ¬", "Õ¥Õ¶", "Õ¯Õ¡Õ´Õ¡Õ¾Õ¸ÖÕ¶Õ¥ÖÕ«", "Õ¯Õ¸Õ²Õ´Õ«Ö",
+ "Õ¸Ö", "Õ°Õ¡Õ´Õ¡ÖÕµÕ¡", "Õ¢Õ¸Õ¬Õ¸Ö", "Õ°Õ¸Õ¤Õ¾Õ¡Õ®Õ¶Õ¥ÖÕ¨", "Õ¯Õ¡ÖÕ¸Õ²", "Õ§", "ÕÕ´Õ¢Õ¡Õ£ÖÕ¥Õ¬", "ÖÕ¡Õ¶Õ¯Õ¡Ö", "Õ´Õ¡ÖÕ¤", "Õ¸Õ¾", "Õ¯Õ¡ÖÕ¸Õ²", "Õ§", "Õ¢Õ¡ÖÕ¥Õ¬", "ÕÕ«ÖÕ«ÕºÕ¥Õ¤Õ«Õ¡ÕµÕ«", "Õ¯Õ¡ÕµÖÕ¨" } );
+ }
+
+ public void testAmharic() throws Exception {
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "ááªááµá« á¨á£á á¥á ááá á¨á°áá áµááááá áá» áááá ááááµ (á¢áá³ááááá²á«) ááᢠááááá",
+ new String[] { "ááªááµá«", "á¨á£á", "á¥á", "ááá", "á¨á°áá", "áµááááá", "áá»", "áááá ", "ááááµ", "á¢áá³ááááá²á«", "áá", "ááááá" } );
+ }
+
+ public void testArabic() throws Exception {
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "اÙÙÙÙÙ
اÙÙØ«Ø§Ø¦ÙÙ Ø§ÙØ£Ù٠ع٠ÙÙÙÙØ¨ÙØ¯ÙØ§ ÙØ³Ù
Ù \"Ø§ÙØÙÙÙØ© Ø¨Ø§ÙØ£Ø±ÙاÙ
: ÙØµØ© ÙÙÙÙØ¨ÙØ¯ÙØ§\" (Ø¨Ø§ÙØ¥ÙجÙÙØ²ÙØ©: Truth in Numbers: The Wikipedia Story)Ø Ø³ÙØªÙ
Ø¥Ø·ÙØ§ÙÙ ÙÙ 2008.",
+ new String[] { "اÙÙÙÙÙ
", "اÙÙØ«Ø§Ø¦ÙÙ", "Ø§ÙØ£ÙÙ", "عÙ", "ÙÙÙÙØ¨ÙØ¯ÙØ§", "ÙØ³Ù
Ù", "Ø§ÙØÙÙÙØ©", "Ø¨Ø§ÙØ£Ø±ÙاÙ
", "ÙØµØ©", "ÙÙÙÙØ¨ÙØ¯ÙØ§",
+ "Ø¨Ø§ÙØ¥ÙجÙÙØ²ÙØ©", "Truth", "in", "Numbers", "The", "Wikipedia", "Story", "Ø³ÙØªÙ
", "Ø¥Ø·ÙØ§ÙÙ", "ÙÙ", "2008" } );
+ }
+
+ public void testAramaic() throws Exception {
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "ÜÜÜ©ÜܦÜÜÜ (ÜÜ¢ÜÜ ÜÜ: Wikipedia) ÜÜ ÜÜÜ¢Ü£Ü©Ü ÜܦÜÜÜ ÜÜÜªÜ¬Ü ÜÜÜ¢ÜÜªÜ¢Ü ÜÜ Ü«Ü¢ÌÜ Ü£ÜÜÜÌÜÜ Ü«Ü¡Ü ÜÜ¬Ü Ü¡Ü¢ Ü¡ÌÜ Ü¬Ü Ü\"ÜÜÜ©Ü\" Ü\"ÜÜÜ¢Ü£Ü©Ü ÜܦÜÜÜ\"Ü",
+ new String[] { "ÜÜÜ©ÜܦÜÜÜ", "ÜÜ¢ÜÜ ÜÜ", "Wikipedia", "ÜÜ", "ÜÜÜ¢Ü£Ü©Ü ÜܦÜÜÜ", "ÜÜܪܬÜ", "ÜÜÜ¢ÜܪܢÜ", "ÜÜ Ü«Ü¢ÌÜ", "Ü£ÜÜÜÌÜ", "ܫܡÜ",
+ "ÜܬÜ", "ܡܢ", "Ü¡ÌÜ Ü¬Ü", "Ü", "ÜÜÜ©Ü", "Ü", "ÜÜÜ¢Ü£Ü©Ü ÜܦÜÜÜ"});
+ }
+
+ public void testBengali() throws Exception {
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "à¦à¦ বিশà§à¦¬à¦à§à¦· পরিà¦à¦¾à¦²à¦¨à¦¾ à¦à¦°à§ à¦à¦à¦à¦¿à¦®à¦¿à¦¡à¦¿à¦¯à¦¼à¦¾ ফাà¦à¦¨à§à¦¡à§à¦¶à¦¨ (à¦à¦à¦à¦¿ à¦
লাà¦à¦à¦¨à¦ সà¦à¦¸à§à¦¥à¦¾)। à¦à¦à¦à¦¿à¦ªà¦¿à¦¡à¦¿à¦¯à¦¼à¦¾à¦° শà§à¦°à§ à§§à§« à¦à¦¾à¦¨à§à¦¯à¦¼à¦¾à¦°à¦¿, ২০০১ সালà§à¥¤ à¦à¦à¦¨ পরà§à¦¯à¦¨à§à¦¤ ২০০à¦à¦¿à¦°à¦ বà§à¦¶à§ à¦à¦¾à¦·à¦¾à¦¯à¦¼ à¦à¦à¦à¦¿à¦ªà¦¿à¦¡à¦¿à¦¯à¦¼à¦¾ রয়à§à¦à§à¥¤",
+ new String[] { "à¦à¦", "বিশà§à¦¬à¦à§à¦·", "পরিà¦à¦¾à¦²à¦¨à¦¾", "à¦à¦°à§", "à¦à¦à¦à¦¿à¦®à¦¿à¦¡à¦¿à¦¯à¦¼à¦¾", "ফাà¦à¦¨à§à¦¡à§à¦¶à¦¨", "à¦à¦à¦à¦¿", "à¦
লাà¦à¦à¦¨à¦", "সà¦à¦¸à§à¦¥à¦¾", "à¦à¦à¦à¦¿à¦ªà¦¿à¦¡à¦¿à¦¯à¦¼à¦¾à¦°",
+ "শà§à¦°à§", "à§§à§«", "à¦à¦¾à¦¨à§à¦¯à¦¼à¦¾à¦°à¦¿", "২০০১", "সালà§", "à¦à¦à¦¨", "পরà§à¦¯à¦¨à§à¦¤", "২০০à¦à¦¿à¦°à¦", "বà§à¦¶à§", "à¦à¦¾à¦·à¦¾à¦¯à¦¼", "à¦à¦à¦à¦¿à¦ªà¦¿à¦¡à¦¿à¦¯à¦¼à¦¾", "রয়à§à¦à§" });
+ }
+
+ public void testFarsi() throws Exception {
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "ÙÛÚ©Û Ù¾Ø¯ÛØ§Û اÙÚ¯ÙÛØ³Û در ØªØ§Ø±ÛØ® Û²Ûµ Ø¯Û Û±Û³Û·Û¹ Ø¨Ù ØµÙØ±Øª Ù
Ú©Ù
ÙÛ Ø¨Ø±Ø§Û Ø¯Ø§ÙØ´ÙاÙ
ÙÙ ØªØ®ØµØµÛ ÙÙÙ¾Ø¯ÛØ§ ÙÙØ´ØªÙ شد.",
+ new String[] { "ÙÛÚ©Û", "Ù¾Ø¯ÛØ§Û", "اÙÚ¯ÙÛØ³Û", "در", "ØªØ§Ø±ÛØ®", "Û²Ûµ", "دÛ", "Û±Û³Û·Û¹", "بÙ", "ØµÙØ±Øª", "Ù
Ú©Ù
ÙÛ",
+ "براÛ", "Ø¯Ø§ÙØ´ÙاÙ
ÙÙ", "تخصصÛ", "ÙÙÙ¾Ø¯ÛØ§", "ÙÙØ´ØªÙ", "شد" });
+ }
+
+ public void testGreek() throws Exception {
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "ÎÏάÏεÏαι Ïε ÏÏ
νεÏγαÏία αÏÏ ÎµÎ¸ÎµÎ»Î¿Î½ÏÎÏ Î¼Îµ Ïο λογιÏÎ¼Î¹ÎºÏ wiki, κάÏι ÏοÏ
Ïημαίνει ÏÏι άÏθÏα μÏοÏεί να ÏÏοÏÏεθοÏν ή να αλλάξοÏ
ν αÏÏ Ïον καθÎνα.",
+ new String[] { "ÎÏάÏεÏαι", "Ïε", "ÏÏ
νεÏγαÏία", "αÏÏ", "εθελονÏÎÏ", "με", "Ïο", "λογιÏμικÏ", "wiki", "κάÏι", "ÏοÏ
",
+ "Ïημαίνει", "ÏÏι", "άÏθÏα", "μÏοÏεί", "να", "ÏÏοÏÏεθοÏν", "ή", "να", "αλλάξοÏ
ν", "αÏÏ", "Ïον", "καθÎνα" });
+ }
+
+ public void testThai() throws Exception {
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "à¸à¸²à¸£à¸à¸µà¹à¹à¸à¹à¸à¹à¸à¸à¹à¸ªà¸à¸à¸§à¹à¸²à¸à¸²à¸à¸à¸µ. à¹à¸¥à¹à¸§à¹à¸à¸à¸à¸°à¹à¸à¹à¸«à¸? à¹à¹à¹à¹",
+ new String[] { "à¸à¸²à¸£à¸à¸µà¹à¹à¸à¹à¸à¹à¸à¸à¹à¸ªà¸à¸à¸§à¹à¸²à¸à¸²à¸à¸à¸µ", "à¹à¸¥à¹à¸§à¹à¸à¸à¸à¸°à¹à¸à¹à¸«à¸", "à¹à¹à¹à¹" });
+ }
+
+ public void testLao() throws Exception {
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "ສາàºàº²àº¥àº°àºàº°àº¥àº±àº àºàº°àºàº²àºàº´àºàº°à»àº àºàº°àºàº²àºàº»àºàº¥àº²àº§",
+ new String[] { "ສາàºàº²àº¥àº°àºàº°àº¥àº±àº", "àºàº°àºàº²àºàº´àºàº°à»àº", "àºàº°àºàº²àºàº»àºàº¥àº²àº§" });
+ }
+
+ public void testTibetan() throws Exception {
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "སྣོà½à¼à½à½à½¼à½à¼à½à½à¼à½£à½¦à¼à½ à½à½²à½¦à¼à½à½¼à½à¼à½¡à½²à½à¼à½à½²à¼à½à½à½¦à¼à½à½¼à½à¼à½ à½à½ºà½£à¼à½à½´à¼à½à½à½¼à½à¼à½à½¢à¼à½§à¼à½
à½à¼à½à½à½ºà¼à½à½à½à¼à½à½à½²à½¦à¼à½¦à½¼à¼ à¼",
+ new String[] { "སྣོà½", "à½à½à½¼à½", "à½à½", "ལས", "འà½à½²à½¦", "à½à½¼à½", "ཡིà½",
+ "à½à½²", "à½à½à½¦", "à½à½¼à½", "འà½à½ºà½£", "à½à½´", "à½à½à½¼à½", "à½à½¢",
+ "ཧ", "à½
à½", "à½à½à½º", "à½à½à½", "à½à½à½²à½¦", "སོ" });
+ }
+
+ /*
+ * For chinese, tokenize as char (these can later form bigrams or whatever)
+ */
+ public void testChinese() throws Exception {
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "ææ¯ä¸å½äººã ï¼ï¼ï¼ï¼ ï¼´ï½
ï½ï½ï½ ",
+ new String[] { "æ", "æ¯", "ä¸", "å½", "人", "ï¼ï¼ï¼ï¼", "ï¼´ï½
ï½ï½ï½"});
+ }
+
+ public void testEmpty() throws Exception {
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "", new String[] {});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, ".", new String[] {});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, " ", new String[] {});
+ }
+
+ /* test various jira issues this analyzer is related to */
+
+ public void testLUCENE1545() throws Exception {
+ /*
+ * Standard analyzer does not correctly tokenize combining character U+0364 COMBINING LATIN SMALL LETTRE E.
+ * The word "moͤchte" is incorrectly tokenized into "mo" "chte", the combining character is lost.
+ * Expected result is only on token "moͤchte".
+ */
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "moͤchte", new String[] { "moͤchte" });
+ }
+
+ /* Tests from StandardAnalyzer, just to show behavior is similar */
+ public void testAlphanumericSA() throws Exception {
+ // alphanumeric tokens
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "B2B", new String[]{"B2B"});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "2B", new String[]{"2B"});
+ }
+
+ public void testDelimitersSA() throws Exception {
+ // other delimiters: "-", "/", ","
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "some-dashed-phrase", new String[]{"some", "dashed", "phrase"});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "dogs,chase,cats", new String[]{"dogs", "chase", "cats"});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "ac/dc", new String[]{"ac", "dc"});
+ }
+
+ public void testApostrophesSA() throws Exception {
+ // internal apostrophes: O'Reilly, you're, O'Reilly's
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "O'Reilly", new String[]{"O'Reilly"});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "you're", new String[]{"you're"});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "she's", new String[]{"she's"});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "Jim's", new String[]{"Jim's"});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "don't", new String[]{"don't"});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "O'Reilly's", new String[]{"O'Reilly's"});
+ }
+
+ public void testNumericSA() throws Exception {
+ // floating point, serial, model numbers, ip addresses, etc.
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "21.35", new String[]{"21.35"});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "R2D2 C3PO", new String[]{"R2D2", "C3PO"});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "216.239.63.104", new String[]{"216.239.63.104"});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "216.239.63.104", new String[]{"216.239.63.104"});
+ }
+
+ public void testTextWithNumbersSA() throws Exception {
+ // numbers
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "David has 5000 bones", new String[]{"David", "has", "5000", "bones"});
+ }
+
+ public void testVariousTextSA() throws Exception {
+ // various
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "C embedded developers wanted", new String[]{"C", "embedded", "developers", "wanted"});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "foo bar FOO BAR", new String[]{"foo", "bar", "FOO", "BAR"});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "foo bar . FOO <> BAR", new String[]{"foo", "bar", "FOO", "BAR"});
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "\"QUOTED\" word", new String[]{"QUOTED", "word"});
+ }
+
+ public void testKoreanSA() throws Exception {
+ // Korean words
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "ìë
íì¸ì íê¸ì
ëë¤", new String[]{"ìë
íì¸ì", "íê¸ì
ëë¤"});
+ }
+
+ public void testOffsets() throws Exception {
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "David has 5000 bones",
+ new String[] {"David", "has", "5000", "bones"},
+ new int[] {0, 6, 10, 15},
+ new int[] {5, 9, 14, 20});
+ }
+
+ public void testTypes() throws Exception {
+ BaseTokenStreamTestCase.assertAnalyzesTo(a, "David has 5000 bones",
+ new String[] {"David", "has", "5000", "bones"},
+ new String[] { "<ALPHANUM>", "<ALPHANUM>", "<NUM>", "<ALPHANUM>" });
+ }
+
+ public void testUnicodeWordBreaks() throws Exception {
+ WordBreakTestUnicode_5_2_0 wordBreakTest = new WordBreakTestUnicode_5_2_0();
+ wordBreakTest.test(a);
+ }
+}