W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
詞典被用來(lái)消除不被搜索考慮的詞(stop words)、并被用來(lái)正規(guī)化詞這樣同一個(gè)詞的不同派生形式將會(huì)匹配。一個(gè)被成功地正規(guī)化的詞被稱為一個(gè)詞位。除了提高搜索質(zhì)量,正規(guī)化和移除停用詞減小了文檔的tsvector
表示的尺寸,因而提高了性能。正規(guī)化不會(huì)總是有語(yǔ)言上的意義并且通常依賴于應(yīng)用的語(yǔ)義。
一些正規(guī)化的例子:
語(yǔ)言學(xué)的 — Ispell 詞典嘗試將輸入詞縮減為一種正規(guī)化的形式;詞干分析器詞典移除詞的結(jié)尾
URL位置可以被規(guī)范化來(lái)得到等效的 URL 匹配:
http://www.pgsql.ru/db/mw/index.html
http://www.pgsql.ru/db/mw/
http://www.pgsql.ru/db/../db/mw/index.html
顏色名可以被它們的十六進(jìn)制值替換,例如red, green, blue, magenta -> FF0000, 00FF00, 0000FF, FF00FF
如果索引數(shù)字,我們可以移除某些小數(shù)位來(lái)縮減可能的數(shù)字的范圍,因此如果只保留小數(shù)點(diǎn)后兩位,例如3.14159265359、3.1415926、3.14在正規(guī)化后會(huì)變得相同。
一個(gè)詞典是一個(gè)程序,它接受一個(gè)記號(hào)作為輸入,并返回:
如果輸入的記號(hào)對(duì)詞典是已知的,則返回一個(gè)詞位數(shù)組(注意一個(gè)記號(hào)可能產(chǎn)生多于一個(gè)詞位)
一個(gè)TSL_FILTER
標(biāo)志被設(shè)置的單一詞位,用一個(gè)新記號(hào)來(lái)替換要被傳遞給后續(xù)字典的原始記號(hào)(做這件事的一個(gè)字典被稱為一個(gè)過(guò)濾字典)
如果字典知道該記號(hào)但它是一個(gè)停用詞,則返回一個(gè)空數(shù)組
如果字典不識(shí)別該輸入記號(hào),則返回NULL
PostgreSQL為許多語(yǔ)言提供了預(yù)定義的字典。也有多種預(yù)定義模板可以被用于創(chuàng)建帶自定義參數(shù)的新詞典。每一種預(yù)定義詞典模板在下面描述。如果沒(méi)有合適的現(xiàn)有模板,可以創(chuàng)建新的;例子見(jiàn)PostgreSQL發(fā)布的contrib/
區(qū)域。
一個(gè)文本搜索配置把一個(gè)解析器和一組處理解析器輸出記號(hào)的詞典綁定在一起。對(duì)于每一中解析器能返回的記號(hào)類(lèi)型,配置都指定了一個(gè)單獨(dú)的詞典列表。當(dāng)該類(lèi)型的一個(gè)記號(hào)被解析器找到時(shí),每一個(gè)詞典都被按照順序查詢,知道某個(gè)詞典將其識(shí)別為一個(gè)已知詞。如果它被標(biāo)識(shí)為一個(gè)停用詞或者沒(méi)有一個(gè)詞典識(shí)別它,它將被丟棄并且不會(huì)被索引和用于搜索。通常,第一個(gè)返回非NULL
輸出的詞典決定結(jié)果,并且任何剩下的詞典都不會(huì)被查找;但是一個(gè)過(guò)濾詞典可以將給定詞替換為一個(gè)被修改的詞,它再被傳遞給后續(xù)的詞典。
配置一個(gè)詞典列表的通用規(guī)則是將最狹窄、最特定的詞典放在第一位,然后是更加通用的詞典,以一個(gè)非常通用的詞典結(jié)尾,像一個(gè)Snowball詞干分析器或什么都識(shí)別的simple
。例如,對(duì)于一個(gè)天文學(xué)相關(guān)的搜索(astro_en
配置)我們可以把記號(hào)類(lèi)型asciiword
(ASCII
詞)綁定到一個(gè)天文學(xué)術(shù)語(yǔ)的分類(lèi)詞典、一個(gè)通用英語(yǔ)詞典和一個(gè)Snowball英語(yǔ)詞干分析器:
ALTER TEXT SEARCH CONFIGURATION astro_en ADD MAPPING FOR asciiword WITH astrosyn, english_ispell, english_stem;
一個(gè)過(guò)濾詞典可以被放置在列表中的任意位置,除了在最后,因?yàn)檫^(guò)濾詞典放在最后就等于無(wú)用。過(guò)濾詞典可用于部分正規(guī)化詞來(lái)簡(jiǎn)化后續(xù)詞典的工作。例如,一個(gè)過(guò)濾詞典可以被用來(lái)從音標(biāo)字母中移除重音符號(hào),就像unaccent模塊所做的。
停用詞是非常常用、在幾乎每一個(gè)文檔中出現(xiàn)并且沒(méi)有任何區(qū)分度的詞。因此,在全文搜索的環(huán)境中它們可以被忽略。例如,每一段英語(yǔ)文本都包含a
和the
等次,因此把它們存儲(chǔ)在一個(gè)索引中是沒(méi)有用處的。但是,停用詞確實(shí)會(huì)影響在tsvector
中的位置,這進(jìn)而會(huì)影響排名:
SELECT to_tsvector('english', 'in the list of stop words');
to_tsvector
----------------------------
'list':3 'stop':5 'word':6
缺失的位置 1、2、4 是因?yàn)橥S迷~。文檔的排名計(jì)算在使用和不使用停用詞的情況下是很不同的:
SELECT ts_rank_cd (to_tsvector('english', 'in the list of stop words'), to_tsquery('list & stop'));
ts_rank_cd
------------
0.05
SELECT ts_rank_cd (to_tsvector('english', 'list stop words'), to_tsquery('list & stop'));
ts_rank_cd
------------
0.1
如何對(duì)待停用詞是由指定詞典決定的。例如,ispell
詞典首先正規(guī)化詞并且查看停用詞列表,而Snowball
詞干分析器首先檢查停用詞的列表。這種不同行為的原因是一沖降低噪聲的嘗試。
simple
詞典模板的操作是將輸入記號(hào)轉(zhuǎn)換為小寫(xiě)形式并且根據(jù)一個(gè)停用詞文件檢查它。如果該記號(hào)在該文件中被找到,則返回一個(gè)空數(shù)組,導(dǎo)致該記號(hào)被丟棄。否則,該詞的小寫(xiě)形式被返回作為正規(guī)化的詞位。作為一種選擇,該詞典可以被配置為將非停用詞報(bào)告為未識(shí)別,允許它們被傳遞給列表中的下一個(gè)詞典。
下面是一個(gè)使用simple
模板的詞典定義的例子:
CREATE TEXT SEARCH DICTIONARY public.simple_dict (
TEMPLATE = pg_catalog.simple,
STOPWORDS = english
);
這里,english
是一個(gè)停用詞文件的基本名稱。該文件的全名將是$SHAREDIR/tsearch_data/english.stop
,其中$SHAREDIR
表示PostgreSQL安裝的共享數(shù)據(jù)目錄,通常是/usr/local/share/postgresql
(如果不確定,使用
pg_config --sharedir
)。該文件格式是一個(gè)詞的列表,每行一個(gè)。空行和尾部的空格都被忽略,并且大寫(xiě)也被折疊成小寫(xiě),但是沒(méi)有其他對(duì)該文件內(nèi)容的處理。
現(xiàn)在我們能夠測(cè)試我們的詞典:
SELECT ts_lexize('public.simple_dict', 'YeS');
ts_lexize
-----------
{yes}
SELECT ts_lexize('public.simple_dict', 'The');
ts_lexize
-----------
{}
如果沒(méi)有在停用詞文件中找到,我們也可以選擇返回NULL
而不是小寫(xiě)形式的詞。這種行為可以通過(guò)設(shè)置詞典的Accept
參數(shù)為false
來(lái)選擇。繼續(xù)該例子:
ALTER TEXT SEARCH DICTIONARY public.simple_dict ( Accept = false );
SELECT ts_lexize('public.simple_dict', 'YeS');
ts_lexize
-----------
SELECT ts_lexize('public.simple_dict', 'The');
ts_lexize
-----------
{}
在使用默認(rèn)值Accept
= true
,只有把一個(gè)simple
詞典放在詞典列表的尾部才有用,因?yàn)樗鼘⒉粫?huì)傳遞任何記號(hào)給后續(xù)的詞典。相反,Accept
= false
只有當(dāng)至少有一個(gè)后續(xù)詞典的情況下才有用。
大部分類(lèi)型的詞典依賴于配置文件,例如停用詞文件。這些文件必須被存儲(chǔ)為 UTF-8 編碼。當(dāng)它們被讀入服務(wù)器時(shí),如果存在不同,它們將被翻譯成真實(shí)的數(shù)據(jù)庫(kù)編碼。
通常,當(dāng)一個(gè)詞典配置文件第一次在數(shù)據(jù)庫(kù)會(huì)話中使用時(shí),數(shù)據(jù)庫(kù)會(huì)話將只讀取它一次。如果你修改了一個(gè)配置文件并且想強(qiáng)迫現(xiàn)有的會(huì)話取得新內(nèi)容,可以在該詞典上發(fā)出一個(gè)ALTER TEXT SEARCH DICTIONARY
命令。這可以是一次“假”更新,它并不實(shí)際修改任何參數(shù)值。
這個(gè)詞典模板被用來(lái)創(chuàng)建用于同義詞替換的詞典。不支持短語(yǔ)(使用分類(lèi)詞典模板(本文中第 12.6.4 節(jié))可以支持)。一個(gè)同義詞詞典可以被用來(lái)解決語(yǔ)言學(xué)問(wèn)題,例如,阻止一個(gè)英語(yǔ)詞干分析器詞典把詞“Paris”縮減成
“pari”。在同義詞詞典中有一行Paris paris
并把它放在english_stem
詞典之前就足夠了。例如:
SELECT * FROM ts_debug('english', 'Paris');
alias | description | token | dictionaries | dictionary | lexemes
-----------+-----------------+-------+----------------+--------------+---------
asciiword | Word, all ASCII | Paris | {english_stem} | english_stem | {pari}
CREATE TEXT SEARCH DICTIONARY my_synonym (
TEMPLATE = synonym,
SYNONYMS = my_synonyms
);
ALTER TEXT SEARCH CONFIGURATION english
ALTER MAPPING FOR asciiword
WITH my_synonym, english_stem;
SELECT * FROM ts_debug('english', 'Paris');
alias | description | token | dictionaries | dictionary | lexemes
-----------+-----------------+-------+---------------------------+------------+---------
asciiword | Word, all ASCII | Paris | {my_synonym,english_stem} | my_synonym | {paris}
synonym
模板要求的唯一參數(shù)是SYNONYMS
,它是其配置文件的基本名 — 上例中的my_synonyms
。該文件的完整名稱將是$SHAREDIR/tsearch_data/my_synonyms.syn
(其中$SHAREDIR
表示
PostgreSQL安裝的共享數(shù)據(jù)目錄)。該文件格式是每行一個(gè)要被替換的詞,后面跟著它的同義詞,用空白分隔。空行和結(jié)尾的空格會(huì)被忽略。
synonym
模板還有一個(gè)可選的參數(shù)CaseSensitive
,其默認(rèn)值為false
。當(dāng)CaseSensitive
為false
時(shí),同義詞文件中的詞被折疊成小寫(xiě),這和輸入記號(hào)一樣。當(dāng)它為true
時(shí),詞和記號(hào)將不會(huì)被折疊成小寫(xiě),但是比較時(shí)就好像被折疊過(guò)一樣。
一個(gè)星號(hào)(*
)可以被放置在配置文件中一個(gè)同義詞的末尾。這表示該同義詞是一個(gè)前綴。當(dāng)項(xiàng)被用在to_tsvector()
中時(shí),星號(hào)會(huì)被忽略;當(dāng)它被用在to_tsquery()
中時(shí),結(jié)果將是一個(gè)帶有前綴匹配標(biāo)記器(見(jiàn)第 12.3.2 節(jié))的查詢項(xiàng)。例如,假設(shè)我們?cè)?code class="filename">$SHAREDIR/tsearch_data/synonym_sample.syn中有這些項(xiàng):
postgres pgsql
postgresql pgsql
postgre pgsql
gogle googl
indices index*
那么我們將得到這些結(jié)果:
mydb=# CREATE TEXT SEARCH DICTIONARY syn (template=synonym, synonyms='synonym_sample');
mydb=# SELECT ts_lexize('syn', 'indices');
ts_lexize
-----------
{index}
(1 row)
mydb=# CREATE TEXT SEARCH CONFIGURATION tst (copy=simple);
mydb=# ALTER TEXT SEARCH CONFIGURATION tst ALTER MAPPING FOR asciiword WITH syn;
mydb=# SELECT to_tsvector('tst', 'indices');
to_tsvector
-------------
'index':1
(1 row)
mydb=# SELECT to_tsquery('tst', 'indices');
to_tsquery
------------
'index':*
(1 row)
mydb=# SELECT 'indexes are very useful'::tsvector;
tsvector
---------------------------------
'are' 'indexes' 'useful' 'very'
(1 row)
mydb=# SELECT 'indexes are very useful'::tsvector @@ to_tsquery('tst', 'indices');
?column?
----------
t
(1 row)
一個(gè)分類(lèi)詞典(有時(shí)被簡(jiǎn)寫(xiě)成TZ)是一個(gè)詞的集合,其中包括了詞與短語(yǔ)之間的聯(lián)系,即廣義詞(BT)、狹義詞(NT)、首選詞、非首選詞、相關(guān)詞等。
基本上一個(gè)分類(lèi)詞典會(huì)用一個(gè)首選詞替換所有非首選詞,并且也可選擇地保留原始術(shù)語(yǔ)用于索引。PostgreSQL的分類(lèi)詞典的當(dāng)前實(shí)現(xiàn)是同義詞詞典的一個(gè)擴(kuò)展,并增加了短語(yǔ)支持。一個(gè)分類(lèi)詞典要求一個(gè)下列格式的配置文件:
# this is a comment
sample word(s) : indexed word(s)
more sample word(s) : more indexed word(s)
...
其中冒號(hào)(:
)符號(hào)扮演了一個(gè)短語(yǔ)及其替換之間的定界符。
一個(gè)分類(lèi)詞典使用一個(gè)子詞典(在詞典的配置中指定)在檢查短語(yǔ)匹配之前正規(guī)化輸入文本。只能選擇一個(gè)子詞典。如果子詞典無(wú)法識(shí)別一個(gè)詞,將報(bào)告一個(gè)錯(cuò)誤。在這種情況下,你應(yīng)該移除該詞的使用或者讓子詞典學(xué)會(huì)這個(gè)詞。你可以在一個(gè)被索引詞的開(kāi)頭放上一個(gè)星號(hào)(*
)來(lái)跳過(guò)在其上應(yīng)用子詞典,但是所有采樣詞必須被子詞典知道。
如果有多個(gè)短語(yǔ)匹配輸入,則分類(lèi)詞典選擇最長(zhǎng)的那一個(gè),并且使用最后的定義打破連結(jié)。
由子詞典識(shí)別的特定停用詞不能夠被指定;改用?
標(biāo)記任何可以出現(xiàn)停用詞的地方。例如,假定根據(jù)子詞典a
和the
是停用詞:
? one ? two : swsw
匹配a one the two
和the one a two
;兩者都將被swsw
替換。
由于一個(gè)分類(lèi)詞典具有識(shí)別短語(yǔ)的能力,它必須記住它的狀態(tài)并與解析器交互。一個(gè)分類(lèi)詞典使用這些任務(wù)來(lái)檢查它是否應(yīng)當(dāng)處理下一個(gè)詞或者停止累積。分類(lèi)詞典必須被小心地配置。例如,如果分類(lèi)詞典被分配只處理asciiword
記號(hào),則一個(gè)形如one 7
的分類(lèi)詞典定義將不會(huì)工作,因?yàn)橛浱?hào)類(lèi)型uint
沒(méi)有被分配給該分類(lèi)詞典。
在索引期間要用到分類(lèi)詞典,因此分類(lèi)詞典參數(shù)中的任何變化都要求重索引。對(duì)于大多數(shù)其他索引類(lèi)型,例如增加或移除停用詞等小改動(dòng)都不會(huì)強(qiáng)制重索引。
要定義一個(gè)新的分類(lèi)詞典,可使用thesaurus
模板。例如:
CREATE TEXT SEARCH DICTIONARY thesaurus_simple (
TEMPLATE = thesaurus,
DictFile = mythesaurus,
Dictionary = pg_catalog.english_stem
);
這里:
thesaurus_simple
是新詞典的名稱
mythesaurus
是分類(lèi)詞典配置文件的基礎(chǔ)名稱(它的全名將是$SHAREDIR/tsearch_data/mythesaurus.ths
,其中$SHAREDIR
表示安裝的共享數(shù)據(jù)目錄)。
pg_catalog.english_stem
是要用于分類(lèi)詞典正規(guī)化的子詞典(這里是一個(gè) Snowball 英語(yǔ)詞干分析器)。注意子詞典將擁有它自己的配置(例如停用詞),但這里沒(méi)有展示。
現(xiàn)在可以在配置中把分類(lèi)詞典thesaurus_simple
綁定到想要的記號(hào)類(lèi)型上,例如:
ALTER TEXT SEARCH CONFIGURATION russian
ALTER MAPPING FOR asciiword, asciihword, hword_asciipart
WITH thesaurus_simple;
考慮一個(gè)簡(jiǎn)單的天文學(xué)分類(lèi)詞典thesaurus_astro
,它包含一些天文學(xué)詞組合:
supernovae stars : sn
crab nebulae : crab
下面我們創(chuàng)建一個(gè)詞典并綁定一些記號(hào)類(lèi)型到一個(gè)天文學(xué)分類(lèi)詞典以及英語(yǔ)詞干分析器:
CREATE TEXT SEARCH DICTIONARY thesaurus_astro (
TEMPLATE = thesaurus,
DictFile = thesaurus_astro,
Dictionary = english_stem
);
ALTER TEXT SEARCH CONFIGURATION russian
ALTER MAPPING FOR asciiword, asciihword, hword_asciipart
WITH thesaurus_astro, english_stem;
現(xiàn)在我們可以看看它如何工作。ts_lexize
對(duì)于測(cè)試一個(gè)分類(lèi)詞典用處不大,因?yàn)樗阉妮斎肟闯墒且粋€(gè)單一記號(hào)。我們可以用plainto_tsquery
和to_tsvector
,它們將把其輸入字符串打斷成多個(gè)記號(hào):
SELECT plainto_tsquery('supernova star');
plainto_tsquery
-----------------
'sn'
SELECT to_tsvector('supernova star');
to_tsvector
-------------
'sn':1
原則上,如果你對(duì)參數(shù)加了引號(hào),你可以使用to_tsquery
:
SELECT to_tsquery('''supernova star''');
to_tsquery
------------
'sn'
注意在thesaurus_astro
中supernova star
匹配supernovae stars
,因?yàn)槲覀冊(cè)诜诸?lèi)詞典定義中指定了english_stem
詞干分析器。該詞干分析器移除了e
和s
。
要和替補(bǔ)一樣也索引原始短語(yǔ),只要將它包含在定義的右手部分中:
supernovae stars : sn supernovae stars
SELECT plainto_tsquery('supernova star');
plainto_tsquery
-----------------------------
'sn' & 'supernova' & 'star'
Ispell詞典模板支持詞法詞典,它可以把一個(gè)詞的很多不同語(yǔ)言學(xué)的形式正規(guī)化成相同的詞位。例如,一個(gè)英語(yǔ)Ispell詞典可以匹配搜索詞bank
的詞尾變化和詞形變化,例如banking
、banked
、
banks
、banks'
和bank's
。
標(biāo)準(zhǔn)的PostgreSQL發(fā)布不包括任何Ispell配置文件。用于很多種語(yǔ)言的詞典可以從Ispell得到。此外,也支持一些更現(xiàn)代的詞典文件格式 — MySpell(OO < 2.0.1)和Hunspell(OO >= 2.0.2)。一個(gè)很大的詞典列表在OpenOffice Wiki上可以得到。
要?jiǎng)?chuàng)建一個(gè)Ispell詞典,執(zhí)行這三步:
下載詞典配置文件。OpenOffice擴(kuò)展文件的擴(kuò)展名是.oxt
。有必要抽取.aff
和.dic
文件,把擴(kuò)展改為.affix
和.dict
。對(duì)于某些詞典文件,還需要使用下面的命令把字符轉(zhuǎn)換成
UTF-8 編碼(例如挪威語(yǔ)詞典):
iconv -f ISO_8859-1 -t UTF-8 -o nn_no.affix nn_NO.aff
iconv -f ISO_8859-1 -t UTF-8 -o nn_no.dict nn_NO.dic
拷貝文件到$SHAREDIR/tsearch_data
目錄
用下面的命令把文件載入到 PostgreSQL:
CREATE TEXT SEARCH DICTIONARY english_hunspell (
TEMPLATE = ispell,
DictFile = en_us,
AffFile = en_us,
Stopwords = english);
這里,DictFile
、AffFile
和StopWords
指定詞典、詞綴和停用詞文件的基礎(chǔ)名稱。停用詞文件的格式和前面解釋的simple
詞典類(lèi)型相同。其他文件的格式在這里沒(méi)有指定,但是也可以從上面提到的網(wǎng)站獲得。
Ispell 詞典通常識(shí)別一個(gè)有限集合的詞,這樣它們后面應(yīng)該跟著另一個(gè)更廣義的詞典;例如,一個(gè) Snowball 詞典,它可以識(shí)別所有東西。
Ispell的.affix
文件具有下面的結(jié)構(gòu):
prefixes
flag *A:
. > RE # As in enter > reenter
suffixes
flag T:
E > ST # As in late > latest
[^AEIOU]Y > -Y,IEST # As in dirty > dirtiest
[AEIOU]Y > EST # As in gray > grayest
[^EY] > EST # As in small > smallest
.dict
文件具有下面的結(jié)構(gòu):
lapse/ADGRS
lard/DGRS
large/PRTY
lark/MRS
.dict
文件的格式是:
basic_form/affix_class_name
在.affix
文件中,每一個(gè)詞綴標(biāo)志以下面的格式描述:
condition > [-stripping_letters,] adding_affix
這里的條件具有和正則表達(dá)式相似的格式。它可以使用分組[...]
和[^...]
。例如,[AEIOU]Y
表示詞的最后一個(gè)字母是"y"
并且倒數(shù)第二個(gè)字母是"a"
、"e"
、
"i"
、"o"
或者"u"
。[^EY]
表示最后一個(gè)字母既不是"e"
也不是"y"
。
Ispell 詞典支持劃分復(fù)合詞,這是一個(gè)有用的特性。注意詞綴文件應(yīng)該用compoundwords controlled
語(yǔ)句指定一個(gè)特殊標(biāo)志,它標(biāo)記可以參與到復(fù)合格式中的詞典詞:
compoundwords controlled z
下面是挪威語(yǔ)的一些例子:
SELECT ts_lexize('norwegian_ispell', 'overbuljongterningpakkmesterassistent');
{over,buljong,terning,pakk,mester,assistent}
SELECT ts_lexize('norwegian_ispell', 'sjokoladefabrikk');
{sjokoladefabrikk,sjokolade,fabrikk}
MySpell格式是Hunspell格式的一個(gè)子集。Hunspell的.affix
文件具有下面的結(jié)構(gòu):
PFX A Y 1
PFX A 0 re .
SFX T N 4
SFX T 0 st e
SFX T y iest [^aeiou]y
SFX T 0 est [aeiou]y
SFX T 0 est [^ey]
一個(gè)詞綴類(lèi)的第一行是頭部。頭部后面列出了詞綴規(guī)則的域:
參數(shù)名(PFX 或者 SFX)
標(biāo)志(詞綴類(lèi)的名稱)
從該詞的開(kāi)始(前綴)或者結(jié)尾(后綴)剝離字符
增加詞綴
和正則表達(dá)式格式類(lèi)似的條件。
.dict
文件看起來(lái)和Ispell的.dict
文件相似:
larder/M
lardy/RT
large/RSPMYT
largehearted
MySpell 不支持復(fù)合詞。Hunspell則對(duì)復(fù)合詞有更好的支持。當(dāng)前,PostgreSQL只實(shí)現(xiàn)了 Hunspell 中基本的復(fù)合詞操作。
Snowball詞典模板基于 Martin Porter 的一個(gè)項(xiàng)目,他是流行的英語(yǔ) Porter 詞干分析算法的發(fā)明者。Snowball 現(xiàn)在對(duì)許多語(yǔ)言提供詞干分析算法(詳見(jiàn)Snowball 站點(diǎn))。每一個(gè)算法懂得按照其語(yǔ)言中的拼寫(xiě),如何縮減詞的常見(jiàn)變體形式為一個(gè)基礎(chǔ)或詞干。一個(gè) Snowball
詞典要求一個(gè)language
參數(shù)來(lái)標(biāo)識(shí)要用哪種詞干分析器,并且可以選擇地指定一個(gè)stopword
文件名來(lái)給出一個(gè)要被消除的詞列表(PostgreSQL的標(biāo)準(zhǔn)停用詞列表也是由 Snowball 項(xiàng)目提供的)。例如,有一個(gè)內(nèi)建的定義等效于
CREATE TEXT SEARCH DICTIONARY english_stem (
TEMPLATE = snowball,
Language = english,
StopWords = english
);
停用詞文件格式和已經(jīng)解釋的一樣。
一個(gè)Snowball詞典識(shí)別所有的東西,不管它能不能簡(jiǎn)化該詞,因此它應(yīng)當(dāng)被放置在詞典列表的最后。把它放在任何其他詞典前面是沒(méi)有用處的,因?yàn)橐粋€(gè)記號(hào)永遠(yuǎn)不會(huì)穿過(guò)它而進(jìn)入到下一個(gè)詞典。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: