本文目錄一覽:
java編個中文分詞的程序
import java.io.Reader;
import java.io.StringReader;
import org.apache.lucene.analysis.*;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.cn.ChineseAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.mira.lucene.analysis.MIK_CAnalyzer;
public class JeAnalyzer {
public static void testStandard(String testString) {
try {
Analyzer analyzer = new StandardAnalyzer();
Reader r = new StringReader(testString);
StopFilter sf = (StopFilter) analyzer.tokenStream(“”, r);
System.err.println(“=====standard analyzer====”);
Token t;
while ((t = sf.next()) != null) {
System.out.println(t.termText());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void testCJK(String testString) {
try {
Analyzer analyzer = new CJKAnalyzer();
Reader r = new StringReader(testString);
StopFilter sf = (StopFilter) analyzer.tokenStream(“”, r);
System.err.println(“=====cjk analyzer====”);
Token t;
while ((t = sf.next()) != null) {
System.out.println(t.termText());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void testChiniese(String testString) {
try {
Analyzer analyzer = new ChineseAnalyzer();
Reader r = new StringReader(testString);
TokenFilter tf = (TokenFilter) analyzer.tokenStream(“”, r);
System.err.println(“=====chinese analyzer====”);
Token t;
while ((t = tf.next()) != null) {
System.out.println(t.termText());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static String transJe(String testString, String c1, String c2) {
String result = “”;
try {
Analyzer analyzer = new MIK_CAnalyzer();
Reader r = new StringReader(testString);
TokenStream ts = (TokenStream) analyzer.tokenStream(“”, r);
Token t;
while ((t = ts.next()) != null) {
result += t.termText() + “,”;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
try {
String testString = “中文分詞的方法其實不局限於中文應用,也被應用到英文處理,如手寫識別,單詞之間的空格就很清楚,中文分詞方法可以幫助判別英文單詞的邊界”;
System.out.println(“測試的語句 “+testString);
String sResult[] = transJe(testString, “gb2312”, “utf-8”).split(“,”);
for (int i = 0; i sResult.length; i++) {
System.out.println(sResult[i]);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
jar包
lucene-analyzers-2.4.1.jar
lucene-core-2.4.1.jar
IKAnalyzer2.0.2OBF.jar
java中文分詞組件word怎麼使用
參考如下
1、快速體驗
運行項目根目錄下的腳本demo-word.bat可以快速體驗分詞效果
用法: command [text] [input] [output]
命令command的可選值為:demo、text、file
demo
text 楊尚川是APDPlat應用級產品開發平台的作者
file d:/text.txt d:/word.txt
exit
2、對文本進行分詞
移除停用詞:ListWord words = WordSegmenter.seg(“楊尚川是APDPlat應用級產品開發平台的作者”);
保留停用詞:ListWord words = WordSegmenter.segWithStopWords(“楊尚川是APDPlat應用級產品開發平台的作者”);
System.out.println(words);
輸出:
移除停用詞:[楊尚川, apdplat, 應用級, 產品, 開發平台, 作者]
保留停用詞:[楊尚川, 是, apdplat, 應用級, 產品, 開發平台, 的, 作者]
3、對文件進行分詞
String input = “d:/text.txt”;
String output = “d:/word.txt”;
移除停用詞:WordSegmenter.seg(new File(input), new File(output));
保留停用詞:WordSegmenter.segWithStopWords(new File(input), new File(output));
4、自定義配置文件
默認配置文件為類路徑下的word.conf,打包在word-x.x.jar中
自定義配置文件為類路徑下的word.local.conf,需要用戶自己提供
如果自定義配置和默認配置相同,自定義配置會覆蓋默認配置
配置文件編碼為UTF-8
5、自定義用戶詞庫
自定義用戶詞庫為一個或多個文件夾或文件,可以使用絕對路徑或相對路徑
用戶詞庫由多個詞典文件組成,文件編碼為UTF-8
詞典文件的格式為文本文件,一行代表一個詞
可以通過系統屬性或配置文件的方式來指定路徑,多個路徑之間用逗號分隔開
類路徑下的詞典文件,需要在相對路徑前加入前綴classpath:
指定方式有三種:
指定方式一,編程指定(高優先級):
WordConfTools.set(“dic.path”, “classpath:dic.txt,d:/custom_dic”);
DictionaryFactory.reload();//更改詞典路徑之後,重新加載詞典
指定方式二,Java虛擬機啟動參數(中優先級):
java -Ddic.path=classpath:dic.txt,d:/custom_dic
指定方式三,配置文件指定(低優先級):
使用類路徑下的文件word.local.conf來指定配置信息
dic.path=classpath:dic.txt,d:/custom_dic
如未指定,則默認使用類路徑下的dic.txt詞典文件
6、自定義停用詞詞庫
使用方式和自定義用戶詞庫類似,配置項為:
stopwords.path=classpath:stopwords.txt,d:/custom_stopwords_dic
7、自動檢測詞庫變化
可以自動檢測自定義用戶詞庫和自定義停用詞詞庫的變化
包含類路徑下的文件和文件夾、非類路徑下的絕對路徑和相對路徑
如:
classpath:dic.txt,classpath:custom_dic_dir,
d:/dic_more.txt,d:/DIC_DIR,D:/DIC2_DIR,my_dic_dir,my_dic_file.txt
classpath:stopwords.txt,classpath:custom_stopwords_dic_dir,
d:/stopwords_more.txt,d:/STOPWORDS_DIR,d:/STOPWORDS2_DIR,stopwords_dir,remove.txt
8、顯式指定分詞算法
對文本進行分詞時,可顯式指定特定的分詞算法,如:
WordSegmenter.seg(“APDPlat應用級產品開發平台”, SegmentationAlgorithm.BidirectionalMaximumMatching);
SegmentationAlgorithm的可選類型為:
正向最大匹配算法:MaximumMatching
逆向最大匹配算法:ReverseMaximumMatching
正向最小匹配算法:MinimumMatching
逆向最小匹配算法:ReverseMinimumMatching
雙向最大匹配算法:BidirectionalMaximumMatching
雙向最小匹配算法:BidirectionalMinimumMatching
雙向最大最小匹配算法:BidirectionalMaximumMinimumMatching
全切分算法:FullSegmentation
最少分詞算法:MinimalWordCount
最大Ngram分值算法:MaxNgramScore
9、分詞效果評估
運行項目根目錄下的腳本evaluation.bat可以對分詞效果進行評估
評估採用的測試文本有253 3709行,共2837 4490個字符
評估結果位於target/evaluation目錄下:
corpus-text.txt為分好詞的人工標註文本,詞之間以空格分隔
test-text.txt為測試文本,是把corpus-text.txt以標點符號分隔為多行的結果
standard-text.txt為測試文本對應的人工標註文本,作為分詞是否正確的標準
result-text-***.txt,***為各種分詞算法名稱,這是word分詞結果
perfect-result-***.txt,***為各種分詞算法名稱,這是分詞結果和人工標註標準完全一致的文本
wrong-result-***.txt,***為各種分詞算法名稱,這是分詞結果和人工標註標準不一致的文本
java word分詞器怎樣安裝在java中
word分詞是一個Java實現的分佈式的中文分詞組件,提供了多種基於詞典的分詞算法,並利用ngram模型來消除歧義。
如果需要安裝word分詞器可以參考下面的步驟:
1、確保電腦上已經安裝了JDK軟件和Eclispe工具,沒有安裝的可以到對應的官網下載安裝:
JDK官網:
Eclipse官網:
2、下載word分詞器的相關jar包:
打開word分詞器的官方github主頁:
下拉找到ReadME部分,點擊「編譯好的jar下載」:
頁面將會跳轉到到百度雲盤的下載頁面,按照需求下載指定的版本即可。
注意:word1.3需要JDK1.8。
下載完成之後解壓到指定目錄。
3、創建Java項目,導入word分詞器的相關jar包:
打開Eclipse,右鍵創建Java project項目:
然後右鍵項目選擇Build path打開導入頁面,導入剛才下載的jar包到項目中:
導入成功之後就可以在自己的項目中使用word分詞器了。
java語言中文分詞程序怎麼編寫分詞程序正
現可以提供兩種思路:
1.String或是StringBuffer(建議用) 中的indexOf(“中華”)方法,查找給定的的字符串中是否有給定詞表中的詞。
2.借鑒編譯原理中的狀態裝換的思想。
先編寫一個狀態機,用於測試給定字符串中的詞是否滿足詞表中的內容。
寫在最後:1)建議使用第一種方法,因為在java 內部實現的查找操作其實 和你想得思路是相同的,不過他的效率會高些。
2)如果個人的編程能力比較強或是不考慮效率只是想實現專有的分詞算法。可以使用第二種方法。
3)以上的兩種方法都可以使用多線程來提高程序的效率。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/304623.html