導航:首頁 > 網站優化 > seo中文分詞演算法

seo中文分詞演算法

發布時間:2020-11-11 00:31:22

1、Java中文分詞演算法

這兩天正好在玩lucene,沒用庖丁分詞,主要是嫌它要配置環境,麻煩
下面是demo,記得要加lucene-core-2.3.2.jar和lucene-Analyzer.jar以及IKAnalyzer.jar這幾個包,有問題call我

import java.io.Reader;
import java.io.StringReader;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.StopFilter;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenFilter;
import org.apache.lucene.analysis.TokenStream;
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.IK_CAnalyzer;

public class TestJeAnalyzer {
private static String testString1 = "冗長的代碼常常是復雜性的標志,會導致代碼難以測試和維護.";
public static void testStandard(String testString) throws Exception{
Analyzer analyzer = new StandardAnalyzer();
Reader r = new StringReader(testString);
StopFilter sf = (StopFilter) analyzer.tokenStream("", r);
System.err.println("=====standard analyzer====");
System.err.println("分析方法:默認沒有詞只有字");
Token t;
while ((t = sf.next()) != null) {
System.out.println(t.termText());
}
}
public static void testCJK(String testString) throws Exception{
Analyzer analyzer = new CJKAnalyzer();
Reader r = new StringReader(testString);
StopFilter sf = (StopFilter) analyzer.tokenStream("", r);
System.err.println("=====cjk analyzer====");
System.err.println("分析方法:交叉雙字分割");
Token t;
while ((t = sf.next()) != null) {
System.out.println(t.termText());
}
}
public static void testChiniese(String testString) throws Exception{
Analyzer analyzer = new ChineseAnalyzer();
Reader r = new StringReader(testString);
TokenFilter tf = (TokenFilter) analyzer.tokenStream("", r);
System.err.println("=====chinese analyzer====");
System.err.println("分析方法:基本等同StandardAnalyzer");
Token t;
while ((t = tf.next()) != null) {
System.out.println(t.termText());
}
}

public static void testJe(String testString) throws Exception{
// Analyzer analyzer = new MIK_CAnalyzer();
Analyzer analyzer = new IK_CAnalyzer();
Reader r = new StringReader(testString);
TokenStream ts = (TokenStream)analyzer.tokenStream("", r);
System.err.println("=====je analyzer====");
System.err.println("分析方法:字典分詞,正反雙向搜索,具體不明");
Token t;
while ((t = ts.next()) != null) {
System.out.println(t.termText());
}
}
public static void main(String[] args) throws Exception{
// String testString = testString1;
String testString = testString1;
System.out.println(testString);

testStandard(testString);
testCJK(testString);
// testPaoding(testString);

testChiniese(testString);
testJe(testString);
}

}

2、n-gram中文分詞演算法怎麼算

主要看你的詞表結構了,最大詞長的初始值,查詞典的次數和匹配的次數,然後得出時間復雜度,原始hash演算法復雜度沒記錯的話應該是2.89,11年看過一個文獻,提出一種改進的演算法時間復雜度是2.291…… 另外,分詞演算法並不是原封不動的,比如有些搜索。

3、有哪些比較好的中文分詞方案

中文分詞演算法大概分為兩大類

a.第一類是基於字元串匹配,即掃描字元串,如果發現字元串的子串和詞相同,就算匹配。
這類分詞通常會加入一些啟發式規則,比如「正向/反向最大匹配」, 「長詞優先」 等策略。

這類演算法優點是速度塊,都是O(n)時間復雜度,實現簡單,效果尚可。

也有缺點,就是對歧義和未登錄詞處理不好。

b.第二類是基於統計以及機器學習的分詞方式

這類分詞基於人工標注的詞性和統計特徵,對中文進行建模,即根據觀測到的數據(標注好的語料)對模型參數進行估計,即訓練。 在分詞階段再通過模型計算各種分詞出現的概率,將概率最大的分詞結果作為最終結果。常見的序列標注模型有HMM和CRF。

這類分詞演算法能很好處理歧義和未登錄詞問題,效果比前一類效果好,但是需要大量的人工標注數據,以及較慢的分詞速度。

4、百度演算法中怎麼進行中文切詞分詞?

導讀:百度作為中文搜索引擎的先驅,它的核心地位可以說在短時期是沒有任何搜索引擎可以超越的,百度的卓越成就在於它對博大精深的中國文化的領悟和對中文分詞的的超強功底。百度受歡迎的主要原因除了用戶習慣的原因,在較大程度上得益於百度演算法的精準率,搜索結果值更貼近用戶的想獲得的資訊。用一句廣告詞 「正是我想要的」來形容百度最恰當不過了。

正因為百度對中國搜索引擎市場的統治地位,企業想在網上賺取大量的鈔票,就不得不依靠百度。所以做搜索引擎的優化實際上就是百度優化。但百度強大的反優化能力和人工干預機制,使得眾多的優化者以失敗以失敗告終。對於大多數優化者來說,百度成了洪水猛獸。果真如此嗎?網路行銷大師鄧友成認為不盡然。只要是搜索引擎就離不開演算法,任何演算法都是有規律可循的。下面我們深入淺出的探討一下百度的演算法吧。

一. 搜索信息響應

當用戶向百度提出搜索請求後百度會迅速根據用戶的請求提供比較精準的結果值。

1. 比喻當用戶提交「搜索引擎 優化 技術」這個查詢文字串.百度會將文字串分割成若乾子文字串,用空格,標點符等做細分處理。那麼這個文字串就可以分成「搜索引擎,優化,技術」。

2. 如果用戶提交的請求有重復的文字元,例如」優化 技術 優化」,百度會將重復的文字元看成一個。而字元的出現順序就忽略。

3. 當用戶提交請求中出現英文字元,百度一般會將英文字元當作一個整體來看,並和中文詞分割開來,如果中文出現數字也是這樣處理的。

百度通過切割、重組、歸並、減負等手段對用戶請求進行精準響應,使搜索結果符合用戶的想法,以節省用戶的查詢時間,提高查詢效率。

二. 中文核心分詞

中文分詞是百度演算法的核心要素。按中文語法習慣,三個字(含三個字)以下的文字元是獨立精準的詞彙,沒有重組的必要,所以百度對三個字(含三個字)以下的文字元不考慮細分。這也是百度核心演算法的第一層,也是響應數量最多的部分。一般這些文字元更新的時間比較慢一些,一周或兩周的時間。屬於大更新的范疇。

四個字元的百度就會毫不客氣的大卸十八塊比如,網路工具這個文字串,當用戶發出搜索請求後,會發現在搜索結果裡面出現了紅色的標記,已經把這個文字元分成了「網路,工具」。當然如果是四個字以上的文字串就更不用說了。會分成更多的分詞。

三、字詞匹配

大概了解了百度的分詞原理後,我們要了解的一個重要方面就是字詞的匹配問題。如果不知道字詞的匹配,做優化就是空談了。

最大匹配法

最大匹配法亦稱MM法。假設自動分詞詞典(或詞庫)中的最長詞條是y個字,則取被處理材料當前字元串序列中的前y個字作為匹配欄位,查找詞典,若詞典中存在這樣的一個y字詞,則匹配成功,匹配欄位被作為一個詞切分出來;如果在詞典中找不到這樣一個y字詞,則匹配失敗,匹配欄位去掉最後一個字,剩下的欄位重新進行匹配,如此進行下去,直到匹配成功,也就是完成一輪匹配,切分出一個詞為止。

正向最大匹配演算法

正向最大匹配法(由左到右的方向)。首先粗分,按照句子把文本切成一個一個句子。然後把每個句子切成單字。字典按照樹形結構存儲,比如這句話「春天還會遠嗎」首先查找「春」字開頭的詞,然後按照字典樹形結構往下走一個節點,查找「春」後面一個字是「天」的詞,然後又下沉一個節點,找「還」下面是「會」的詞,找不到了,查找就結束。

反向最大匹配演算法

逆向最大匹配法(由右到左的方向);就是朝相反的方向發掘可以匹配的文字,比如網上商城這個文字串,那麼會向左延伸在王上的前面會出現的結果是區域性的文字,不如上海或者北京等,在商城的前面會出現更精準的定義文字元,不如愛家,女人等專屬性強的文字元。

雙向最大匹配演算法

正向最大匹配方法和逆向最大匹配方法結合起來構成雙向匹配法。就是向左右縱深挖掘比較匹配的結果值。

熟悉了百度分詞的方法後,我們就要在優化的過程充分的考慮相關聯的因素,合理的對你所要向用戶推薦的文字串做合理的規范和謀劃。軟優化歡迎優化者們和我們一道加強交流共同進步。

5、seo優化中網站標題與百度中文分詞的關系

seo優化的細節過程中標題是非常重要的元素之一,在seo的交流與討論中曾有人說過這樣一句話,seo不就是改改標題加加友情鏈接嘛,當時還是一笑了之,如今想來這位朋友真說對了一句話,seo優化細節過程中,網站的標題還是非常重要的。那麼百度中文分詞與網站標題到底有什麼關系呢?
1、搜索詞與網站標題完全匹配
當用戶在百度搜索的時候,搜索詞如果和您的網站標題完全匹配,當您的網站達到一定的權重的時候就會有個好的排名,那麼如果詞不和您的網站標題完全匹配就進行分詞,分詞的方式參與了中文分詞原理的綜合方式。
2、搜索詞不匹配才進行分詞
當詞語與您的網站標題不匹配的時候就會進行分詞,分詞的方式會參與,正向、逆向、統計、理解、以及新詞和歧義詞。

6、中文分詞原理 百度如何分詞 分詞對seo的影響

分詞是搜索引擎的一種技術,做seo可以合理利用搜索引擎的分詞技術,避免關鍵詞堆砌

7、如何在SEO中靈活運用百度中文分詞技術

第一:字元串匹配的分詞方法

(1)正向最大匹配法

就是把一個詞從左至右來分詞。

舉個例子:」不知道你在說什麼」

這句話採用正向最大匹配法是如何分的呢?「不知道,你,在,說什麼」。

(2)反向最大匹配法

「不知道你在說什麼」反向最大匹配法來分上面這段是如何分的。「不,知道,你在,說,什麼」,這個就分的比較多了,反向最大匹配法就是從右至左。

(3)就是最短路徑分詞法。

就是說一段話裡面要求切出的詞數是最少的。

「不知道你在說什麼」最短路徑分詞法就是指,把上面那句話分成的詞要是最少的。「不知道,你在,說什麼」,這就是最短路徑分詞法,分出來就只有3個詞了。

(4)雙向最大匹配法。

而有一種特殊的情況,就是關健詞前後組合內容被認為粘性相差不大,而搜索結果中也同時包含這兩組詞的話,百度會進行正反向同時進行分詞匹配。

第二:詞義分詞法

就是一種機器語音判斷的分詞方法。很簡單,進行句法、語義分析,利用句法信息和語義信息來處理歧義現象來分詞,這種分詞方法,現在還不成熟,處在測試階段

第三:統計分詞法

根據片語的統計,就會發現兩個相鄰的字出現的頻率最多,那麼這個詞就很重要。就可以作為用戶提供字元串中的分隔符,這樣來分詞。

比如,「我的,你的,許多的,這里,這一,那裡」等等,這些詞出現的比較多,就從這些詞裡面分開來。

如果一天寫10篇文章,一年就可以寫3650篇文章,給你的網站寫3650個關鍵詞並合理布局到你網站中,可以使用關鍵詞挖掘工具提詞,根據用戶需求進行關鍵詞的篩選,吸引流量指日可待。分詞還有一種好處,那就是提升內頁的排名。SEO是心理學,去猜想用戶使用什麼詞搜索,從而進行非常有意思的工作。

8、中文分詞中正向最大匹配演算法的分詞速度是多少?准確率大概為多少?

主要看你的詞表結構了,最大詞長的初始值,查詞典的次數和匹配的次數,然後得出時間復雜度,原始hash演算法復雜度沒記錯的話應該是2.89,11年看過一個文獻,提出一種改進的演算法時間復雜度是2.291……

另外,分詞演算法並不是原封不動的,比如有些搜索引擎的詞表結構就採用tire樹結構,這樣不用設置最大詞長,不過內存空間方面就要有取捨,甚至還有採用減少查典次數增加匹配次數的搜索引擎……
所以單純的給你一個189.3m/M純內存分詞速度,但是這演算法換個台更高配置的伺服器卻變成了497.6ms/M,這沒有任何意義……
記得哪個文獻上有人說,分詞本身不是目的,而是後續處理過程的必要階段,所以,除非你是研究演算法的,否則單純追求這東西的速度和准確率沒什麼太大意義

9、搜索引擎常用的中文分詞的方法有哪些

分詞是指將一段句子切分成一個個單獨的詞項,對於英文來講,單詞作為詞項,由於英文的書寫格式,詞與詞之間必須有空格,這樣搜索引擎很容易將一段句子處理成詞項的集合;但是中文來講,詞之間沒有空格,搜索引擎不能夠直接將句子處理成詞項的集合,需要一個分詞過程,這里簡單介紹搜索引擎中文分詞的方法。

一、基於詞典的分詞方法

也叫「機械分詞法」,將分詞的句子與詞典中的詞語進行匹配,如果匹配成功,則將匹配的部分作為一個詞,最後生成一個詞語序列,根據分詞的方向與優先長度不同可分為一下四種方法:

1、正向匹配法

根絕句子的正序(由左至右)進行匹配,例如:發展中國家,切分為:發展/中國/家。

2、逆向匹配法

根據句子的逆序(由右至左)進行匹配,例如:發展中國家,切分為:發展/中/國家。

3、最大匹配法

根據詞典中最長的詞語的長度確切分,如果不是,則在使用次一級長度去切分,假設字典中最長的詞語是4個,以「發展中國家」為例,首先截取前四個「發展中國」判斷,如果與字典中的詞匹配,那麼就是詞項,如果不匹配,那就截取前三個詞「發展中」來判斷,以此類推直至切分出詞項。

4、最小匹配法

同最大匹配法剛好相反。

二、基於理解分詞的方法

為了解決分詞中的歧義問題,搜索引擎完全模擬人理解句子的過程,對句子進行句法分析與語義分析,這個方法需要大量的語言知識和信息,計算過程比較復雜,對搜索引擎的基礎硬體要求比較高。

三、基於統計分詞的方法

隨著時代與互聯網的發展,會產生很多新的詞彙,例如一些人名、新科技名詞、新事件名(比如XX門、XX帝等),這些詞彙未被詞典收錄,這些詞成為「未登錄詞」,這些詞彙的切分就要依靠統計分詞的方法,搜索引擎通過統計這些字在整個語料庫中出現的頻率,例如在語料庫中發現「S」、「E」、「O」同時出現的次數非常高,那麼搜索引擎就判定」SEO」是一個詞彙。

10、有哪些比較好的中文分詞方案?

1.每次從一個完整的句子里,按照從左向右的順序,識別出多種不同的3個詞的組合;然專後根據下面的屬4條消歧規則,確定最佳的備選片語合;選擇備選片語合中的第1個詞,作為1次迭代的分詞結果;剩餘的2個詞繼續進行下一輪的分詞運算。採用這種辦法的好處是,為傳統的前向最大匹配演算法加入了上下文信息,解決了其每次選詞只考慮詞本身,而忽視上下文相關詞的問題。4條消歧規則包括,
1)備選片語合的長度之和最大。
2)備選片語合的平均詞長最大;
3)備選片語合的詞長變化最小;
4)備選片語合中,單字詞的出現頻率統計值最高。
CRF方法是目前公認的效果最好的分詞演算法。但,具體效果是否好,也依賴於你使用的訓練模型。

與seo中文分詞演算法相關的知識