hanlp lucene plugin
v1.1.6 常规维护
HANLP를 기반으로 Solr (7.x)을 포함한 모든 Lucene (7.x) 기반 시스템이 지원됩니다.
< dependency >
< groupId >com.hankcs.nlp</ groupId >
< artifactId >hanlp-lucene-plugin</ artifactId >
< version >1.1.7</ version >
</ dependency >${webapp}/WEB-INF/lib 에 넣으십시오. (또는 mvn package 사용하여 소스 코드를 패키지하고 target/hanlp-lucene-plugin-xxxjar ${webapp}/WEB-INF/lib 에 복사하십시오)${core}/conf/schema.xml 수정 : < 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 " /> 현재이 플러그인은 schema.xml 기반으로 다음 구성을 지원합니다.
| 구성 항목 이름 | 기능 | 기본값 |
|---|---|---|
| 연산 | 단어 분사 알고리즘 | viterbi |
| enableIndexMode | 인덱스 모드로 설정 (쿼리에서 켜지지 않음) | 진실 |
| enablecustomdictionary | 사용자 사전 활성화 여부 | 진실 |
| CustomDictionaryPath | 사용자 사전 경로 (공간별로 여러 사전으로 분리 된 프로그램에서 읽을 수있는 절대 경로 또는 상대 경로) | 널 |
| enablecustomdictionaryforcing | 사용자 사전 높은 우선 순위 | 거짓 |
| stopworddictionarypath | 단어 사전 경로를 중지하십시오 | 널 |
| enableNumberQuantifierRecegnize | 숫자 및 정량적 단어 인식을 활성화할지 여부 | 진실 |
| enablenamerecognize | 사람 이름 인식을 켜십시오 | 진실 |
| EnableTranslatedNamereCegnize | 음역자 이름 인식을 활성화할지 여부 | 거짓 |
| 일본식을 활성화하십시오 | 일본 이름 인식을 가능하게하는지 여부 | 거짓 |
| EnableOrganizationRecognize | 조직 이름 인식을 켜십시오 | 거짓 |
| enableplacerecognize | 장소 이름 인식을 켜십시오 | 거짓 |
| 활성화 된 정상화 | 캐릭터 정규화를 수행할지 여부 (전통-> 단순화, 전폭-> 반 넓이, 상단> 소문자) | 거짓 |
| EnableTraditionAlchinesEmode | 정확한 전통적인 중국어 단어 세분화를 켜십시오 | 거짓 |
| enabledebug | 디버그 모드를 켭니다 | 거짓 |
더 고급 구성은 주로 클래스 경로에서 hanlp.properties 통해 구성됩니다. 다음과 같은보다 관련된 구성에 대해서는 HANLP Natural Language Processing 패키지 문서를 읽으십시오.
Lucene 또는 Solr의 자체 필터 구현을 사용하는 것이 좋습니다.이 플러그인은 방해하지 않습니다. 예제 구성은 다음과 같습니다.
<!-- 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 " />쿼리를 다시 쓰면 Hanlpanalyzer 분사 결과에서 음성 및 기타 속성의 일부를 사용할 수 있습니다.
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 ());
}다른 시나리오에서 Hanlptokenizer는 사용자 정의 단어 세분화 (예 : 이름이 지명 된 엔티티 인식, 전통적인 중국어 단어 세분화, CRF 단어 세분화 등)를 통해 다음과 같은 다음과 같은 다음과 같은 다음과 같은 다음과 같은 문구 단어 세분화에 의해 뒷받침됩니다.
tokenizer = new HanLPTokenizer ( HanLP . newSegment ()
. enableJapaneseNameRecognize ( true )
. enableIndexMode ( true ), null , false );
tokenizer . setReader ( new StringReader ( "林志玲亮相网友:确定不是波多野结衣?" ));아파치 라이센스 버전 2.0