Как получить границу слова в ZZ_CMAP_PACKED? - PullRequest
2 голосов
/ 12 октября 2019

Я пытаюсь написать свой первый плагин анализа Elasticsearch и обнаружил проект расширяемого стандартного плагина Analyzer от github: asticsearch-analysis-standardext , в проекте он предоставляет следующие коды:

   /** 
    * Word Boundary "character classes" that are used in the ZZ_CMAP_PACKED 
    * string 
    */ 
   public static final Character WB_CLASS_BREAK               = '\0'; 
   public static final Character WB_CLASS_LETTER              = '\176'; 
   public static final Character WB_CLASS_NUMERIC             = '\200'; 
   public static final Character WB_CLASS_MID_LETTER          = '\202'; 
   public static final Character WB_CLASS_MID_NUMBER          = '\203'; 
   public static final Character WB_CLASS_MID_NUMBER_LETTER   = '\204'; 
   public static final Character WB_CLASS_EXTENDED_NUM_LETTER = '\205'; 
   public static final Character WB_CLASS_SINGLE_QUOTE        = '\212'; 
   public static final Character WB_CLASS_DOUBLE_QUOTE        = '\213'; 

Вот ссылка

Я хочу знать, как получить классы символов этих границ слов.

Я спрашиваю автора с проблемой: Как получить границы слов "классы персонажей"? # 2 , но, похоже, автор не ответит на мой вопрос.

Я пытаюсь прочитать документы по сегментации текста Unicode: https://www.unicode.org/reports/tr29/, но я действительно не могу найти, чтоЯ хочу, потому что это трудно и долго читать.

Я загружаю Стандартный код анализатора из хранилища lucene, это здесь: https://github.com/apache/lucene-solr/tree/releases/lucene-solr/8.1.0/lucene/core/src/java/org/apache/lucene/analysis/standard

Кажется, что класс StandardTokenizerImpl.java генерируетсяиз StandardTokenizerImpl.jflex могу ли я получить классы символов этих границ слов с помощью jfex

Спасибо за то, что кто-то мне помогает.

1 Ответ

0 голосов
/ 15 октября 2019

Я обнаружил, что мы можем получить границы этого мира из документа: https://www.unicode.org/reports/tr29/#Word_Boundaries,, и поскольку проект asticsearch-analysis-standardext является действительно старой версией эластичного поиска. Это не будет работать с Elasticsearch версии = 7.3.2.

И мы можем обнаружить, что теперь Lucene не поддерживает простые границы мира, такие как ALetter, его формат будет

MidLetterEx         = [\p{WB:MidLetter}\p{WB:MidNumLet}\p{WB:SingleQuote}] 

. Это видно из файла StandardTokenizerImpl.jflex

Так что если вы хотите получить границу мира из ZZ_CMAP_PACKED, вам следует обратиться к документу Word_Boundaries .

Возможно, это поможет вам, если вы хотите написать собственный StandardTokenizer.

Также вы можете обратиться к ClassicTokenizer из проекта Lucene, это поможет вам!

...