




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、11個Java開源中文分詞器使用方法動力節(jié)點java11大Java開源中文分詞器,不同的分詞器有不同的用法,定義的接口也不一樣,我們先定 義一個統(tǒng)一的接口:/*獲取文本的所有分詞結果,對比不同分詞器結果*/public interface WordSegmenter /*獲取文本的所有分詞結果*param text 文本*return所有的分詞結果,去除重復*/default public Set seg(String text) return segMore(text).values().stream().collect(Collectors.toSet();/*獲取文本的所有分詞結果*pa
2、ram text 文本*return所有的分詞結果,KEY為分詞器模式,VALUE為分詞器結果*/public Map segMore(String text);從上面的定義我們知道,在Java中,同樣的方法名稱和參數,但是返回值不同,這種情況不可以使用重載。這兩個方法的區(qū)別在于返回值,每一個分詞器都可能有多種分詞模式,每種模式的分詞結果 都可能不相同,第一個方法忽略分詞器模式,返回所有模式的所有不重復分詞結果,第二個 方法返回每一種分詞器模式及其對應的分詞結果。在這里,需要注意的是我們使用了 Java8中的新特性默認方法,并使用stream把一個map的valu e轉換為不重復的集合。下面我
3、們利用這11大分詞器來實現這個接口:1、word分詞器Overridepublic Map segMore(String text) Map map = new HashMap();for(SegmentationAlgorithm segmentationAlgorithm : SegmentationAlgorithm.va lues()map.put(segmentationAlgorithm.getDes(), seg(text, segmentationAlgorith m);return map;private static String seg(String text, Segm
4、entationAlgorithm segmentationAlgo rithm) StringBuilder result =new StringBuilder();for(Word word : WordSegmenter.segWithStopWords(text, segmentationAlgorith m)result.append(word.getText().append );,2、Ansj分詞器Overridepublic Map segMore(String text) Map map = new HashMap();StringBuilder result = new S
5、tringBuilder();for(Term term : BaseAnalysis.parse(text)result.append(term.getName().append ); map.put(BaseAnalysis, result.toString();result.setLength 0);for(Term term : ToAnalysis.parse(text)result.append(term.getName().append ); map.put(ToAnalysis, result.toString();result.setLength 0);for (Term t
6、erm : NlpAnalysis .parse(text)result.append(term.getName().append );map.put(NlpAnalysis, result.toString();result.setLength 0);for(Term term :IndexAnalysis.parse(text)map.put(IndexAnalysis, result.toString();return map;3、Stanford 分詞器private static final StanfordCoreNLP CTB = new StanfordCoreNLP(Stan
7、fordCoreNL P-chinese-ctb);private static final StanfordCoreNLP PKU = new StanfordCoreNLP(StanfordCoreNL P-chinese-pku);private static final PrintStream NULL_PRINT_STREAM = new PrintStream(new NullO utputStream(), false);public Map segMore(String text) Map map = new HashMap();map.put Stanford Beijing
8、 University segmentation, seg(PKU, text);map.put Stanford Chinese Treebank segmentation, seg(CTB, text);return map;private static String seg(StanfordCoreNLP stanfordCoreNLP, String text)PrintStream err = System.err;System.setErr(NULL_PRINT_STREAM);Annotationdocument = new Annotation(text);stanfordCo
9、reNLP.annotate document);List sentences =document.get(CoreAnnotations.SentencesAnnotatio n.class);StringBuilder result =new StringBuilder();for(CoreMap sentence: sentences) for (CoreLabel token: sentence.get(CoreAnnotations.TokensAnnotation.cl ass) String word = token.get(CoreAnnotations.TextAnnotat
10、ion.class);result.append(word).appen();System.setErr(err);return result.toString();4、FudanNLP 分詞器private static CWSTagger tagger = null;statictrytagger =iew CWSTagger(lib/fudannlpseg.m);taggersetEnFilterf) tagger.setEnFtertrue);Catch(Exception e)_;一public Map segMore(String text) Map map = new HashM
11、ap();map.put FudanNLP, tagger.tag(text); i;5、Jieba分詞器private static final JiebaSegmenter JIEBA_SEGMENTER = new JiebaSegmenter(); Overridepublic Map segMore(String text) Map map = new HashMap();map.putINDEX, seg(text, SegMode.INDEX);map.putSEARCH, seg(text, SegMode.SEARCH);return map; private static
12、String seg(String text, SegMode segMode) StringBuilder result =new StringBuilder();for(SegToken token : JIEBA_SEGMENTER.process(text, segMode) result.append(token.word.getToken().append );return result.toString(); 6、Jcseg分詞器private static final JcsegTaskConfig CONFIG = new JcsegTaskConfig();private
13、static final ADictionary DIC = DictionaryFactory.createDefaultDiction ary(CONFIG);static CONFIG.setLoadCJKSynfalse);CONFIG.setLoadCJKPinyinfalse);Overridepublic Map segMore (String text) Map map =new HashMap();map.put 復雜模式,segText(text, JcsegTaskConfig.COMPLEX_MODE);map.put 簡易模式,segText(text, JcsegT
14、askConfig.SIMPLE_MODE);return map;private String segText(String text, int segMode) StringBuilder result =new StringBuilder();try ISegment seg = SegmentFactory.createJcseg(segModenew Objectnew Str ingReader(text), CONFIG, DIC);IWord word null;while(word=seg.next()!=null) result.append(word.getValue()
15、.appen();catch (Exception ex) ption(ex) 廠_.7、MMSeg4j分詞器private static final Dictionary DIC = Dictionary.getInstance();private static final SimpleSeg SIMPLE_SEG = new SimpleSeg(DIC);private static final ComplexSeg COMPLEX_SEG = new ComplexSeg(DIC);private static final MaxWordSeg MAX_WORD_SEG = new Ma
16、xWordSeg(DIC);Overridepublic Map segMore (String text) Map map =new HashMap();map.put(SIMPLE_SEG.getClass().getSimpleName(), segText(text, SIMPLE_SE G);map.put(COMPLEX_SEG.getClass().getSimpleName(), segText(text, COMPLEX_SE G);map.put(MAX_WORD_SEG.getClass().getSimpleName(), segText(text, MAX_WORD_
17、S EG);return map; private String segText(String text, Seg seg) StringBuilder result =new StringBuilder();MMSeg mmSeg =new MMSeg(new StringReader(text), seg);try Word word null;while(word=mmSeg.next()!=null) result.append(word.getString().appen();throw new RuntimeException(ex););8、IKAnalyzer 分詞器Overr
18、idepublic Map segMore(String text) Map map = new HashMap();map.put 智能切分, segText(text, true);map.put 細粒度切分,segText(text, false);return map;private String segText(String text, boolean useSmart) StringBuilder result =new StringBuilder();IKSegmenter ik =new IKSegmenter(new StringReader(text), useSmart)
19、;try Lexeme word null;while(word=ik.next()!=null) result.append(word.getLexemeText().appen();_throw new RuntimeException(ex);9、Paoding分詞器private static final PaodingAnalyzer ANALYZER = new PaodingAnalyzer();Overridepublic Map segMore(String text) Map map = new HashMap();map.put MOST_WORDS_MODE”, seg
20、(text, PaodingAnalyzer.MOST_WORDS_MODE);map.put MAX_WORD_LENGTH_MODE”, seg(text, PaodingAnalyzer.MAX_WORD_LENGTH _MODE);return map;private static String seg(String text, int mode)ANALYZER.setMode(mode);StringBuilder result =new StringBuilder();try Token reusableToken new Token();TokenStream stream =
21、 ANALYZER.tokenStrea, new StringReader(text);Token token null;while(token = stream.next(reusableToken) ! = null)result.append(token.term().appen();catch (Exception ex) throw new RuntimeException(ex);return result.toString();10、smarten 分詞器private static final SmartChineseAnalyzer SMART_CHINESE_ANALYZ
22、ER = new SmartCh ineseAnalyzer();Overridepublic Map segMore(String text) Map map = new HashMap();map.putsmartcn, segText(text);return map;private static String segText(String text) StringBuilder result =new StringBuilder();try TokenStream tokenStream = SMART_CHINESE_ANALYZER.tokenStreaitext, n ew St
23、ringReader(text);tokenStream.reset();while (tokenStream.incrementToken()CharTermAttribute charTermAttribute = tokenStream.getAttribute(Char TermAttribute.class);result.append(charTermAttribute.toString().appen();tokenStream.close();Catch (Exception e)e.printStackTrace();return result.toString();11、H
24、anLP分詞器private static final Segment N_SHORT_SEGMENT = new NShortSegment().enableCusto mDictionary(false).enablePlaceRecognize(true).enableOrganizationRecognize(tr ue);private static final Segment DIJKSTRA_SEGMENT = new DijkstraSegment().enableCu stomDictionary(false).enablePlaceRecognize(true).enabl
25、eOrganizationRecognize (true);Overridepublic Map segMore(String text) Map map =new HashMap();map.put 標準分詞,standard(text);map.put NLP 分詞,nlp(text);map.put 索弓I分詞,index(text);map.put N-最短路徑分詞,nShort(text);map.put 最短路徑分詞,shortest(text);map.put 極速詞典分詞,speed(text);return map;private static String standard(String text) StringBuilder result =new StringBuilder();StandardTokenizer.segment(text) forEach(term-result.append(term.word).ap pend();return result.toString();private static String nlp(String text) StringBuilder result =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東陽江小升初數學試卷
- 海口中學七升八數學試卷
- 廣州天河中考數學試卷
- 醫(yī)院藥房管理課件
- 健康管理師送課件
- 2025年中國互聯(lián)網+電火鍋市場競爭格局分析及投資方向研究報告
- 2025年中國云母電容器行業(yè)市場調查研究及發(fā)展戰(zhàn)略規(guī)劃報告
- 2025年中國臨時租用收費系統(tǒng)行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 單位工程開工報告模板
- 2025年中國封裝測試行業(yè)市場全景評估及發(fā)展戰(zhàn)略規(guī)劃報告
- 《一粒種子》課件
- 弘揚錢學森精神PPT忠誠擔當踐行科學報國之志PPT課件(帶內容)
- 上半年我國經濟形勢分析與公司應對策略
- 小學語文人教五年級下冊(統(tǒng)編)第六單元-15、自相矛盾學歷案
- 建筑施工項目成本費用分析手冊
- 電磁干擾及防護課件
- 中國教育學會會員申請表
- 黃大年式教師團隊申報
- 新冀人版小學科學三年級下冊全冊教案(2022年春修訂)
- 工作場所空氣中有害物質監(jiān)測的采樣規(guī)范
- 國家開放大學電大《可編程控制器應用》機考2套真題題庫及答案10
評論
0/150
提交評論