導航:首頁 > 源碼編譯 > java中文分詞演算法

java中文分詞演算法

發布時間:2022-06-05 20:11:11

java 怎麼用lucenes進行分詞

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;

/**
* 使用IKAnalyzer進行Lucene索引和查詢的演示
* 2012-3-2
*
* 以下是結合Lucene4.0 API的寫法
*
*/
public class LuceneIndexAndSearchDemo {

/**
* 模擬:
* 創建一個單條記錄的索引,並對其進行搜索
* @param args
*/
public static void main(String[] args){
//Lucene Document的域名
String fieldName = "text";
//檢索內容
String text = "IK Analyzer是一個結合詞典分詞和文法分詞的中文分詞開源工具包。它使用了全新的正向迭代最細粒度切分演算法。";

//實例化IKAnalyzer分詞器
Analyzer analyzer = new IKAnalyzer(true);

Directory directory = null;
IndexWriter iwriter = null;
IndexReader ireader = null;
IndexSearcher isearcher = null;
try {
//建立內存索引對象
directory = new RAMDirectory();

//配置IndexWriterConfig
IndexWriterConfig iwConfig = new IndexWriterConfig(Version.LUCENE_40 , analyzer);
iwConfig.setOpenMode(OpenMode.CREATE_OR_APPEND);
iwriter = new IndexWriter(directory , iwConfig);
//寫入索引
Document doc = new Document();
doc.add(new StringField("ID", "10000", Field.Store.YES));
doc.add(new TextField(fieldName, text, Field.Store.YES));
iwriter.addDocument(doc);
iwriter.close();

//搜索過程**********************************
//實例化搜索器
ireader = DirectoryReader.open(directory);
isearcher = new IndexSearcher(ireader);

String keyword = "中文分詞工具包";
//使用QueryParser查詢分析器構造Query對象
QueryParser qp = new QueryParser(Version.LUCENE_40, fieldName, analyzer);
qp.setDefaultOperator(QueryParser.AND_OPERATOR);
Query query = qp.parse(keyword);
System.out.println("Query = " + query);

//搜索相似度最高的5條記錄
TopDocs topDocs = isearcher.search(query , 5);
System.out.println("命中:" + topDocs.totalHits);
//輸出結果
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (int i = 0; i < topDocs.totalHits; i++){
Document targetDoc = isearcher.doc(scoreDocs[i].doc);
System.out.println("內容:" + targetDoc.toString());
}

} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (LockObtainFailedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} finally{
if(ireader != null){
try {
ireader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(directory != null){
try {
directory.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

Ⅱ java調用txt文件的路徑問題

把代碼提出來。
一種方式:把SegCn.java中的Dictionary.txt路徑改為絕對路徑,例如:d:/src/Dictionary.txt(or d:\\src\\Dictionary.txt )
另一種方式:相對目錄,SegCn.java和Dictionary.txt放在一個目錄下。

Ⅲ java語言中文分詞程序怎麼編寫

現可以提供兩種思路:
1.String或是StringBuffer(建議用)
中的indexOf("中華")方法,查找給定的的字元串中是否有給定詞表中的詞。
2.借鑒編譯原理中的狀態裝換的思想。
先編寫一個狀態機,用於測試給定字元串中的詞是否滿足詞表中的內容。
寫在最後:1)建議使用第一種方法,因為在java
內部實現的查找操作其實
和你想得思路是相同的,不過他的效率會高些。
2)如果個人的編程能力比較強或是不考慮效率只是想實現專有的分詞演算法。可以使用第二種方法。
3)以上的兩種方法都可以使用多線程來提高程序的效率。

Ⅳ 中文分詞的常見項目

功能性能 功能描述:1.新詞自動識別
對詞典中不存在的詞,可以自動識別,對詞典的依賴較小;
2.詞性輸出
分詞結果中帶有豐富的詞性;
3.動態詞性輸出
分詞結果中的詞性並非固定,會根據不同的語境,賦予不同的詞性;
4.特殊詞識別
比如化學、葯品等行業詞彙,地名、品牌、媒體名等;
5.智能歧義解決
根據內部規則,智能解決常見分詞歧義問題;
6.多種編碼識別
自動識別各種單一編碼,並支持混合編碼;
7.數詞量詞優化
自動識別數量詞; 性能介紹:處理器:AMD Athlon II x2 250 3GHZ
單線程大於833KB/s,多線程安全。 一個php函數實現中文分詞。使分詞更容易,使用如下圖:
Paoding(庖丁解牛分詞)基於Java的開源中文分片語件,提供lucene和solr 介面,具有極 高效率和 高擴展性。引入隱喻,採用完全的面向對象設計,構思先進。
高效率:在PIII 1G內存個人機器上,1秒可准確分詞 100萬漢字。
採用基於 不限制個數的詞典文件對文章進行有效切分,使能夠將對詞彙分類定義。
能夠對未知的詞彙進行合理解析。
僅支持Java語言。 MMSEG4J基於Java的開源中文分片語件,提供lucene和solr 介面:
1.mmseg4j 用 Chih-Hao Tsai 的 MMSeg 演算法實現的中文分詞器,並實現 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。
2.MMSeg 演算法有兩種分詞方法:Simple和Complex,都是基於正向最大匹配。Complex 加了四個規則過慮。官方說:詞語的正確識別率達到了 98.41%。mmseg4j 已經實現了這兩種分詞演算法。 盤古分詞是一個基於.net 平台的開源中文分片語件,提供lucene(.net 版本) 和HubbleDotNet的介面
高效:Core Duo 1.8 GHz 下單線程 分詞速度為 390K 字元每秒
准確:盤古分詞採用字典和統計結合的分詞演算法,分詞准確率較高。
功能:盤古分詞提供中文人名識別,簡繁混合分詞,多元分詞,英文詞根化,強制一元分詞,詞頻優先分詞,停用詞過濾,英文專名提取等一系列功能。 jcseg是使用Java開發的一個中文分詞器,使用流行的mmseg演算法實現。
1。mmseg四種過濾演算法,分詞准確率達到了98.4%以上。
2。支持自定義詞庫。在lexicon文件夾下,可以隨便添加/刪除/更改詞庫和詞庫內容,並且對詞庫進行了分類,詞庫整合了《現代漢語詞典》和cc-cedict辭典。
3。詞條拼音和同義詞支持,jcseg為所有詞條標注了拼音,並且詞條可以添加同義詞集合,jcseg會自動將拼音和同義詞加入到分詞結果中。
4。中文數字和分數識別,例如:"四五十個人都來了,三十分之一。"中的"四五十"和"三十分之一",並且jcseg會自動將其轉換為對應的阿拉伯數字。
5。支持中英混合詞的識別。例如:B超,x射線。
6。支持基本單字單位的識別,例如2012年。
7。良好的英文支持,自動識別電子郵件,網址,分數,小數,百分數……。
8。智能圓角半形轉換處理。
9。特殊字母識別:例如:Ⅰ,Ⅱ
10。特殊數字識別:例如:①,⑩
11。配對標點內容提取:例如:最好的Java書《java編程思想》,『暢想杯黑客技術大賽』,被《,『,「,『標點標記的內容。
12。智能中文人名識別。中文人名識別正確率達94%以上。
jcseg佩帶了jcseg.properties配置文檔,使用文本編輯器就可以自主的編輯其選項,配置適合不同應用場合的分詞應用。例如:最大匹配分詞數,是否開啟中文人名識別,是否載入詞條拼音,是否載入詞條同義詞……。 friso是使用c語言開發的一個中文分詞器,使用流行的mmseg演算法實現。完全基於模塊化設計和實現,可以很方便的植入到其他程序中,例如:MySQL,PHP等。並且提供了一個php中文分詞擴展robbe。
1。只支持UTF-8編碼。【源碼無需修改就能在各種平台下編譯使用,載入完20萬的詞條,內存佔用穩定為14M。】。
2。mmseg四種過濾演算法,分詞准確率達到了98.41%。
3。支持自定義詞庫。在dict文件夾下,可以隨便添加/刪除/更改詞庫和詞庫詞條,並且對詞庫進行了分類。
4。詞庫使用了friso的Java版本jcseg的簡化詞庫。
5。支持中英混合詞的識別。例如:c語言,IC卡。
7。很好的英文支持,電子郵件,網址,小數,分數,百分數。
8。支持阿拉伯數字基本單字單位的識別,例如2012年,5噸,120斤。
9。自動英文圓角/半形,大寫/小寫轉換。
並且具有很高的分詞速度:簡單模式:3.7M/秒,復雜模式:1.8M/秒。

Ⅳ 求java中文分類實現過程代碼

這是一個強大的語義+語法+詞法分析器,很難很強大
做好了,你可以試試來網路工作

Ⅵ 漢語句子拆分演算法 java實現 高手請指教

/*實現單個拆開*/
package dd;
public class Dd {

public static void main(String[] args) {
String kissi="今天,天氣比較好";
//將字元串拆成一個char[]數組
//至於tochararray(),請查幫助文檔
char[] kiss=kissi.toCharArray();
for(int i=0;i<kiss.length;i++){
System.out.println(kiss[i]);
}

}

}

Ⅶ java word分詞器怎樣安裝在java中

word分詞是一個Java實現的分布式的中文分片語件,提供了多種基於詞典的分詞演算法,並利用ngram模型來消除歧義。

如果需要安裝word分詞器可以參考下面的步驟:

1、確保電腦上已經安裝了JDK軟體和Eclispe工具,沒有安裝的可以到對應的官網下載安裝:

JDK官網:http://www.oracle.com/technetwork/java/javase/downloads/index.html

Eclipse官網:http://www.eclipse.org

2、下載word分詞器的相關jar包:

打開word分詞器的官方github主頁:https://github.com/ysc/word

導入成功之後就可以在自己的項目中使用word分詞器了。

Ⅷ java通過中文分詞進行網頁分類!

分詞這個也就是中文的組合。解決辦法就是
給出欄位之後,進行拆分,分成2個字,3個字,4個字。之後讓用戶點擊,增加詞的權重。優化資料庫中詞的排序。

Ⅸ java編個中文分詞的程序

importjava.io.Reader;
importjava.io.StringReader;
importorg.apache.lucene.analysis.*;
importorg.apache.lucene.analysis.cjk.CJKAnalyzer;
importorg.apache.lucene.analysis.cn.ChineseAnalyzer;
importorg.apache.lucene.analysis.standard.StandardAnalyzer;
importorg.mira.lucene.analysis.MIK_CAnalyzer;

publicclassJeAnalyzer{

publicstaticvoidtestStandard(StringtestString){
try{
Analyzeranalyzer=newStandardAnalyzer();
Readerr=newStringReader(testString);
StopFiltersf=(StopFilter)analyzer.tokenStream("",r);
System.err.println("=====standardanalyzer====");
Tokent;
while((t=sf.next())!=null){
System.out.println(t.termText());
}
}catch(Exceptione){
e.printStackTrace();
}
}

publicstaticvoidtestCJK(StringtestString){
try{
Analyzeranalyzer=newCJKAnalyzer();
Readerr=newStringReader(testString);
StopFiltersf=(StopFilter)analyzer.tokenStream("",r);
System.err.println("=====cjkanalyzer====");
Tokent;
while((t=sf.next())!=null){
System.out.println(t.termText());
}
}catch(Exceptione){
e.printStackTrace();
}
}

publicstaticvoidtestChiniese(StringtestString){
try{
Analyzeranalyzer=newChineseAnalyzer();
Readerr=newStringReader(testString);
TokenFiltertf=(TokenFilter)analyzer.tokenStream("",r);
System.err.println("=====chineseanalyzer====");
Tokent;
while((t=tf.next())!=null){
System.out.println(t.termText());
}
}catch(Exceptione){
e.printStackTrace();
}
}

publicstaticStringtransJe(StringtestString,Stringc1,Stringc2){
Stringresult="";
try{
Analyzeranalyzer=newMIK_CAnalyzer();
Readerr=newStringReader(testString);
TokenStreamts=(TokenStream)analyzer.tokenStream("",r);
Tokent;
while((t=ts.next())!=null){
result+=t.termText()+",";
}
}catch(Exceptione){
e.printStackTrace();
}
returnresult;
}

publicstaticvoidmain(String[]args){
try{
StringtestString="中文分詞的方法其實不局限於中文應用,也被應用到英文處理,如手寫識別,單詞之間的空格就很清楚,中文分詞方法可以幫助判別英文單詞的邊界";
System.out.println("測試的語句"+testString);
StringsResult[]=transJe(testString,"gb2312","utf-8").split(",");
for(inti=0;i<sResult.length;i++){
System.out.println(sResult[i]);
}
}catch(Exceptione){
e.printStackTrace();
}
}
}

jar包
lucene-analyzers-2.4.1.jar
lucene-core-2.4.1.jar
IKAnalyzer2.0.2OBF.jar

閱讀全文

與java中文分詞演算法相關的資料

熱點內容
java中的Ascii 瀏覽:497
php白盒測試工具 瀏覽:574
男人命令女人 瀏覽:166
全球編程語言排名 瀏覽:785
某百度程序員中午面試 瀏覽:614
程序員劉亦菲的樣子 瀏覽:303
java獲取伺服器的時間格式 瀏覽:69
什麼是java中的多態 瀏覽:330
html包含php文件 瀏覽:359
程序員睡覺少感覺不到困 瀏覽:921
空調壓縮機工作電壓 瀏覽:202
夢幻西遊浙江二區伺服器雲主機 瀏覽:250
什麼樣的人才叫程序員 瀏覽:125
ipad如何解壓縮文件下載 瀏覽:225
知網程序員 瀏覽:706
怎麼把電子版投標報價加密 瀏覽:33
電腦安全編譯器 瀏覽:369
在伺服器里如何調創造 瀏覽:839
知雲登錄為什麼找不到伺服器 瀏覽:819
python切片位置 瀏覽:379