建立索引和查詢的過程中,都是以基本的語素項為單位的。基本的語素項就是通過分詞得到。這個過程決定了索引單元金額最終的匹配過程。
分詞在文字索引的建立過程和使用者提交檢索過程中都存在。利用相同的分詞器,把短語或者句子切分成相同的結果,才能保證檢索過程順利進行。
1、 英文分詞的原理
基本的處理流程是:輸入文字、詞彙分割、詞彙過濾(去除停留詞)、詞幹提取(形態還原)、大寫轉為小寫、結果輸出。
2、 中文分詞原理
中文分詞比較複雜,並沒有英文分詞那麼簡單。這主要是因為中文的詞與詞之間並不像英文中那樣用空格來隔開。
主要的方法有三種:基於詞典匹配的分詞方法、基於語義理解的分詞、基於詞頻統計的分詞。
① 基於詞典匹配的分詞方法
基於字典匹配的分詞方法按照一定的匹配策略將輸入的字串與機器字典詞條進行匹配。如果在詞典中找到當前字串,則匹配成功輸出識別的詞彙。按照匹配操作的掃瞄方向不同,字典匹配分詞方法可以分為正向匹配和逆向匹配,以及結合了兩者的雙向匹配演算法;按照不同長度優先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配;按照是否與詞性標註過程相結合,又可以分為單純分詞方法和分詞與詞性標註相結合的方法。幾種常用的詞典分詞方法如下所示:
● 正向最大匹配(由左到右的方向)。
● 逆向最大匹配(由右到左的方向)。
● 最少切分(是每一句中切除的詞數最小)。
實際應用中上述各種方法經常組合使用,達到最好的效果,從而衍生出了結合正向最大匹配方法和逆向最大匹配演算法的雙向匹配分詞法。由於中分詞最大的問題是歧義處理,結合中文語言自身的特點,經常採用逆向匹配的切分演算法,處理的精度高於正向匹配,產生的切分歧義現象也較少。
真正實用的分詞系統,都是把詞典分詞作為基礎手段,結合各種語言的其他特徵資訊來提高切分的效果和準確度。有的實用系統中將分詞和詞性標註結合起來,利用句法和詞法分析對分詞決策提高幫助,在詞性標註過程中迭代處理,利用詞性和語法資訊對分詞結果進行檢驗、調整。
既然是基於分詞詞典的分詞方法,當然還要考慮選擇乙個好的查詢詞典演算法。一般有數字搜尋樹, trie 演算法等等。
所謂的數字搜尋樹( retrieve 樹)就是要求樹的乙個節點保留乙個字元。如果乙個單詞比乙個字元長,則包含第乙個字串的節點有指向下乙個字元的節點,以此類推。這樣組成乙個層次結構的樹,樹的第一層包括所有單詞的第乙個字元,樹的第二層包括所有單詞的第二個字元,以此類推,數字搜尋樹的最大高度是詞典中最長單詞的長度。但是這樣的樹,每乙個節點都需要很多記憶體。假設每個詞都是由乙個小寫英文本母組成的,這個節點中會有 26 個指標。所以不太可能直接用這樣的數字搜尋樹來儲存中文這樣的大字符集。
trie 樹,即三叉搜尋樹,每乙個節點包括乙個字元,但只有三個指標,乙個指向左邊的樹,乙個指向右邊的樹,還有乙個向下,指向單詞的下乙個資料單元。三叉搜尋樹是二叉搜尋樹和數字搜尋樹的混合體。它有和數字搜尋樹差不多的速度但是和二叉搜尋樹一樣只需要相對較少的記憶體空間。單詞的讀入順序對於建立平衡的三叉搜尋樹很重要,但對於二叉搜尋樹就不是太重要了。由於限於篇幅,這裡就不寫上**了。
② 基於語義理解的分詞
基於語義理解的分詞方法是模擬人腦對語言和句子的理解,達到識別詞彙單元的效果。基本模式是把分詞、句法、語義分析並行進行,利用句法和語義資訊來處理分詞的歧義。
一般結構中通常包括分詞子系統、句法語義子系統、排程系統。在排程系統的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義資訊,模擬人腦對句子的理過程。基於語義理解的分詞方法需要使用大量的語言知識和資訊。
目前國內外對漢語語言知識的理解和處理能力還沒有達到語義層面,具體到語言資訊很難組織成機器可直接讀取、計算的形式,因此目前基於語義理解的分詞系統還處在試驗階段。
③ 基於詞頻統計的分詞
這種做法基於人們對中文詞語的直接感覺。通常詞是穩定的詞的組合,因此在中文文章的上下文中,相鄰的字搭配出現的頻率越多,就越有可能形成乙個固定的詞。根據 n 元語法知識可以知道,字與字相鄰同時出現的頻率或概率能夠較好地反映成詞的可信度。
實際的系統中,通過對精心準備的中文語料中相鄰共現的各個字的組合的頻度進行統計,計算不同字詞的共現資訊。根據兩個字的統計資訊,計算兩個漢字的相鄰共現概率。統計處來的資訊體現了中文環境下漢字之間結合緊密程度。當緊密程度高於某乙個閾值時,便可認為此字組可能構成乙個詞。
基於詞頻統計的分詞方法只需要對語料中的字組頻度進行統計,不需要切分詞典,因而又叫做無詞典分詞法或統計分詞方法。這種方法經常抽出一些共現頻度高、但並不是詞的常用字組,需要專門處理,提高精確度。實際應用的統計分詞系統都使用乙個基本的常用詞詞典,把字典分詞和統計分詞結合使用。基於統計的方法能很好地解決詞典未收錄新詞的處理問題,即將中文分詞中的串頻統計和串匹配結合起來,既發揮匹配分詞切分速度快、效率高的特點,有利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優點。
3、 lucene 分詞
在 lucene3.0 中,對分詞主要依靠 analyzer 類解析實現。 analyzer 內部主要通過 tokenstream 類實現。 tonkenizer 類, tokenfilter 類是 tokenstream 的兩個子類。 tokenizer 處理單個字元組成的字元流,讀取 reader 物件中的資料,處理後轉換成詞彙單元。 toknefilter 完成文字過濾器的功能,但在使用過程中必須注意不同的過濾器的使用的順序。
Lucene常見的分詞
剛上班第乙個任務就是將db查詢改為lucene查詢,之前也沒有接觸過lucene,也是慢慢自學lucene,lucene大概的意思就是將原先的資料庫重新生成重組成新的資料庫,它生成的lucene資料庫會有多個資料夾。用lucene查詢會大大提高查詢的速度。下面介紹的是lucene中常見的幾種分詞。p...
lucene學習二 lucene分詞器
分詞器的作用 在建立索引時會用到分詞器,在使用字串搜尋時也會用到分詞器,這兩個地方要使用同乙個分詞器,否則可能會搜尋不出結果。analyzer 分詞器 的作用是把一段文字中的詞按規則取出所包含的所有詞。對應的是analyzer類,這是乙個抽象類,切分詞的具體規則是由子類實現的,所以對於不同的語言 規...
Lucene 中文分詞的理解
中文與西方文字不同,西方文字如英文的單詞間有空格作為分隔,計算機很容易把乙個個詞分開。而中文句子裡的之間沒有分隔,要把中文句子拆分成詞就需要使用中文分詞技術。由於全文索引採用的是倒排索引技術,所以分詞的效果直接決定了搜尋的效果。目前的中文分詞技術主要有 n元切分 最長匹配 最大壓縮 統計語言模型等方...