Basado en HANLP, se admite cualquier sistema basado en Lucene (7.x) que incluye SOLR (7.x).
< dependency >
< groupId >com.hankcs.nlp</ groupId >
< artifactId >hanlp-lucene-plugin</ artifactId >
< version >1.1.7</ version >
</ dependency >${webapp}/WEB-INF/lib . (O use mvn package para empaquetar el código fuente y copiar target/hanlp-lucene-plugin-xxxjar a ${webapp}/WEB-INF/lib )${core}/conf/schema.xml de Solr Core: < fieldType name = " text_cn " class = " solr.TextField " >
< analyzer type = " index " >
< tokenizer class = " com.hankcs.lucene.HanLPTokenizerFactory " enableIndexMode = " true " />
</ analyzer >
< analyzer type = " query " >
<!-- 切记不要在query中开启index模式 -->
< tokenizer class = " com.hankcs.lucene.HanLPTokenizerFactory " enableIndexMode = " false " />
</ analyzer >
</ fieldType >
<!-- 业务系统中需要分词的字段都需要指定type为text_cn -->
< field name = " my_field1 " type = " text_cn " indexed = " true " stored = " true " />
< field name = " my_field2 " type = " text_cn " indexed = " true " stored = " true " /> Actualmente, este complemento admite las siguientes configuraciones basadas en schema.xml :
| Nombre del elemento de configuración | Función | valor predeterminado |
|---|---|---|
| algoritmo | Algoritmo de participio de palabras | viterbi |
| enableIndexMode | Establecer en modo de índice (no encienda en la consulta) | verdadero |
| habilisequomdiccionario | Si habilita el diccionario de usuario | verdadero |
| CustomDictionaryPath | Ruta del diccionario de usuario (ruta absoluta o ruta relativa que el programa puede leerlo, separado por múltiples diccionarios por espacios) | nulo |
| EnableCustomDictionaryforcing | Diccionario de usuario Alta prioridad | FALSO |
| stopworddictionarypath | Detener la ruta del diccionario de palabras | nulo |
| habilitar el número de vida | Si habilita el reconocimiento de palabras numérico y cuantitativo | verdadero |
| habilitar | Encender el reconocimiento de nombre de la persona | verdadero |
| habiletranslatedNnMeReconizar | Si habilitar el reconocimiento de nombres de la persona transliterada | FALSO |
| habilitar JapanesenamerEcnize | Si habilitar el reconocimiento de nombres japoneses | FALSO |
| habilitar la organización reconocer | Activar reconocimiento de nombre de la organización | FALSO |
| Habilitar PlaceConnize | Activar el reconocimiento del nombre del lugar | FALSO |
| habilitación | Si realizar la regularización de los caracteres (tradicional-> simplificado, ancho completo-> medio ancho, superior-> caso inferior) | FALSO |
| EnableTraditionalChinesEmode | Encienda la segmentación precisa de palabras tradicionales chinas tradicionales | FALSO |
| habilitar | Activar el modo de depuración | FALSO |
Las configuraciones más avanzadas se configuran principalmente a través de hanlp.properties en la ruta de clase. Lea la documentación del paquete de procesamiento de lenguaje natural HANLP para configuraciones más relacionadas, como:
Se recomienda utilizar la implementación de filtros de Lucene o Solr, este complemento no interferirá. Una configuración de ejemplo es la siguiente:
<!-- text_cn字段类型: 指定使用HanLP分词器,同时开启索引模式。通过solr自带的停用词过滤器,使用"stopwords.txt"(默认空白)过滤。
在搜索的时候,还支持solr自带的同义词词典。 -->
< fieldType name = " text_cn " class = " solr.TextField " positionIncrementGap = " 100 " >
< analyzer type = " index " >
< tokenizer class = " com.hankcs.lucene.HanLPTokenizerFactory " enableIndexMode = " true " />
< filter class = " solr.StopFilterFactory " ignoreCase = " true " words = " stopwords.txt " />
<!-- 取消注释可以启用索引期间的同义词词典
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
< filter class = " solr.LowerCaseFilterFactory " />
</ analyzer >
< analyzer type = " query " >
< tokenizer class = " com.hankcs.lucene.HanLPTokenizerFactory " enableIndexMode = " false " />
< filter class = " solr.StopFilterFactory " ignoreCase = " true " words = " stopwords.txt " />
< filter class = " solr.SynonymFilterFactory " synonyms = " synonyms.txt " ignoreCase = " true " expand = " true " />
< filter class = " solr.LowerCaseFilterFactory " />
</ analyzer >
</ fieldType >
<!-- 业务系统中需要分词的字段都需要指定type为text_cn -->
< field name = " my_field1 " type = " text_cn " indexed = " true " stored = " true " />
< field name = " my_field2 " type = " text_cn " indexed = " true " stored = " true " />Al reescribir la consulta, puede usar la parte del habla y otros atributos en el resultado del participio de Hanlpanalyzer, como
String text = "中华人民共和国很辽阔" ;
for ( int i = 0 ; i < text . length (); ++ i )
{
System . out . print ( text . charAt ( i ) + "" + i + " " );
}
System . out . println ();
Analyzer analyzer = new HanLPAnalyzer ();
TokenStream tokenStream = analyzer . tokenStream ( "field" , text );
tokenStream . reset ();
while ( tokenStream . incrementToken ())
{
CharTermAttribute attribute = tokenStream . getAttribute ( CharTermAttribute . class );
// 偏移量
OffsetAttribute offsetAtt = tokenStream . getAttribute ( OffsetAttribute . class );
// 距离
PositionIncrementAttribute positionAttr = tokenStream . getAttribute ( PositionIncrementAttribute . class );
// 词性
TypeAttribute typeAttr = tokenStream . getAttribute ( TypeAttribute . class );
System . out . printf ( "[%d:%d %d] %s/%s n " , offsetAtt . startOffset (), offsetAtt . endOffset (), positionAttr . getPositionIncrement (), attribute , typeAttr . type ());
}En otros escenarios, Hanlptokenizer está compatible con la segmentación de palabras personalizadas (como la segmentación de palabras que permite el reconocimiento de entidades nombrado, segmentación tradicional de palabras chinas, segmentación de palabras de CRF, etc.), como:
tokenizer = new HanLPTokenizer ( HanLP . newSegment ()
. enableJapaneseNameRecognize ( true )
. enableIndexMode ( true ), null , false );
tokenizer . setReader ( new StringReader ( "林志玲亮相网友:确定不是波多野结衣?" ));Apache Licencia Versión 2.0