lucene的tokenfilter中,有synonymfilter和synonymgraphfilter兩種來處理同義詞。
synonymfilter不能很好的處理多詞同義詞,已經被棄用,建議使用synonymgraphfilter
假設有如下文字:
fast wi fi network is down
一到一的同義詞對映
同義詞配置如下:
一到多的同義詞對映
同義詞配置如下:
多到多的同義詞對映
同義詞配置如下:
這種情況下,synonymgraphfilter能產生正確的分詞結果,而synonymfilter的結果是錯誤的。
synonymfilter和synonymgraphfilter都使用正向最大匹配規則。比如有如下的同義詞配置:
a -> x
a b -> y
b c d -> z
當輸入 a b c d e 時會被解析成 y b c d
因為a b在 "a b c d e"**現的最早,且最長。
solrsynonymmap(通過org.apache.lucene.analysis.synonym.solrsynonymparser來構造)
可以看做是乙個資料結構,儲存短語到同義詞的對映關係。
solrsynonymmap內部使用fst來儲存同義詞:
solrsynonymmap接收輸入a,輸出a的所有同義詞 [s1, s2, s3 …]
solrsynonymmap一般通過乙個檔案來配置
空行以及井號』#'開頭的注釋行被忽略
顯式對映。例如:
i-pod, i pod => ipod
當接收到任何匹配到箭頭左側的短語時,會輸出在箭頭右側的所有短語。顯式的對映無視expand引數。
顯式對映時, a, b => c, d
對於a, b, c, d每個短語, 先用analyzer分詞(可能有一些詞幹提取之類的功能),再連成乙個新的短語:
a』, b』 => c』, d』
然後對於每個輸入輸出對,新增一組對映關係:
a' => c'
a' => d'
b' => c'
b' => d'
此時,接受輸入a', 輸出[c', d']
接受輸入b', 輸出[c', d']
等效同義詞。例如:
ipod, i-pod, i pod
假設配置了: a, b, c
對於每個短語,先用analyzer分詞,再連成乙個新的短語a』, b』, c』
此時,如果expand=true,則新增所有輸入對之間的對映關係:
for (int i = 0; i < inputs.length; i++)
}}a' => b'
a' => c'
b' => a'
b' => c'
c' => a'
c' => b'
includeorigin=true (同義詞包含自身)
此時,接受輸入a', 輸出[a', b', c']
接受輸入b', 輸出[a', b', c']
接受輸入c', 輸出[a', b', c']
如果expand=false,則新增所有輸入到第乙個的對映關係:
for (int i = 0; i < inputs.length; i++)
a' => a'
b' => a'
c' => a'
includeorigin=false
此時,接受輸入a', 輸出[a']
接受輸入b', 輸出[a']
接受輸入c', 輸出[a']
同義詞配置項之間會自動合併,例如:
foo => foo bar
foo => baz
等價於:
foo => foo bar, baz
lucene 同義詞分析器
這個分析器用synonymfilter過濾器對standardanalyzer類進行封裝,當向這個過濾器輸入各個項時,會對這些項進行緩衝,並使用棧儲存這些項的同義詞 public class synonymfilter extends tokenfilter publicstatic final s...
常見同義詞
目錄originate from derive from stem from spring from giant n.故事中常為殘酷而愚蠢的 巨人 巨人 巨獸 巨型植物 大公司 強大的組織 adj.巨大的 特大的 偉大的 vast adj.遼闊的 巨大的 龐大的 大量的 tremendous adj...
同義詞(別名)
同義詞 別名 注意 如果檢視其他使用者的表,報錯表或檢視不存在 可能是許可權不足 需要授權 conn as sysdba grant select on hr.employees to scott conn scott tiger select count from hr.employees con...