Sur la base de HANLP, tout système basé sur Lucene (7.x), y compris SOLR (7.x), est pris en charge.
< dependency >
< groupId >com.hankcs.nlp</ groupId >
< artifactId >hanlp-lucene-plugin</ artifactId >
< version >1.1.7</ version >
</ dependency >${webapp}/WEB-INF/lib . (Ou utilisez mvn package pour emballer le code source et copier target/hanlp-lucene-plugin-xxxjar à ${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 " /> Actuellement, ce plug-in prend en charge les configurations suivantes basées sur schema.xml :
| Nom de l'élément de configuration | Fonction | valeur par défaut |
|---|---|---|
| algorithme | Algorithme de participe mot | viterbi |
| activerIndexmode | Réglé sur le mode index (ne pas activer en requête) | vrai |
| Immatingustomdictionary | Si vous devez activer le dictionnaire utilisateur | vrai |
| CustomdictionaryPath | Path du dictionnaire utilisateur (chemin absolu ou chemin relatif qui peut être lu par le programme, séparé par plusieurs dictionnaires par des espaces) | nul |
| Immatingustomdictionary forcing | Dictionnaire utilisateur Priorité élevée | FAUX |
| stopworddictionarypath | Arrêt du chemin du dictionnaire Word | nul |
| permettre de compenser | S'il faut permettre la reconnaissance des mots numériques et quantitatifs | vrai |
| perfectionner | Activer la reconnaissance du nom de la personne | vrai |
| ImmatRanslatedNameRecognise | S'il faut permettre la reconnaissance du nom de la personne translittérée | FAUX |
| Activer JapanEsesenameCognize | S'il faut permettre la reconnaissance du nom japonais | FAUX |
| Activer l'organisation | Activer la reconnaissance du nom de l'organisation | FAUX |
| activer | Activer la reconnaissance du nom du lieu | FAUX |
| désagréation | S'il faut effectuer la régularisation des caractères (traditionnel -> simplifié, pleine largeur -> demi-largeur, supérieur-> inférieur) | FAUX |
| ImmatingTraditionalChineSemode | Allumez une segmentation des mots traditionnels traditionnels précis | FAUX |
| permanence | Activer le mode de débogage | FAUX |
Les configurations plus avancées sont principalement configurées via hanlp.properties sous le chemin de classe. Veuillez lire la documentation du package de traitement du langage naturel HANLP pour des configurations plus connexes, telles que:
Il est recommandé d'utiliser la propre implémentation de filtre de Lucene ou de Solr, ce plug-in ne s'interférera pas. Un exemple de configuration est le suivant:
<!-- 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 " />Lors de la réécriture de la requête, vous pouvez utiliser la partie de la parole et d'autres attributs dans le résultat du participe Hanlpanalyzer, tels que
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 ());
}Dans d'autres scénarios, Hanlptokenizer est soutenu par la segmentation des mots personnalisés (comme la segmentation des mots qui permet la reconnaissance des entités nommées, la segmentation traditionnelle des mots chinois, la segmentation des mots CRF, etc.), comme:
tokenizer = new HanLPTokenizer ( HanLP . newSegment ()
. enableJapaneseNameRecognize ( true )
. enableIndexMode ( true ), null , false );
tokenizer . setReader ( new StringReader ( "林志玲亮相网友:确定不是波多野结衣?" ));Licence Apache version 2.0