使用Perl的Wordnet同义词
我安装了Wordnet :: Similarity和Wordnet :: QueryData,作为计算这些模块附带的信息内容评分和概率的简单方法。 但是我坚持这个基本问题:给一个词,打印n个与它相似的词 - 迭代通过synsets并进行join
应该不难。
使用wn
命令并用很多tr
对它进行管道sort | uniq
sort | uniq
我可以得到所有的单词:
wn cat -synsn | grep -v Sense | tr '=' ' ' | tr '>' ' ' | tr 't' ' ' | tr ',' 'n' | sort | uniq
OUTPUT
8 senses of cat
adult female
adult male
African tea
Arabian tea
big cat
bozo
cat
cat
CAT
Caterpillar
cat-o'-nine-tails
computed axial tomography
computed tomography
computerized axial tomography
computerized tomography
CT
excitant
felid
feline
gossip
gossiper
gossipmonger
guy
hombre
kat
khat
man
newsmonger
qat
quat
rumormonger
rumourmonger
stimulant
stimulant drug
Synonyms/Hypernyms (Ordered by Estimated Frequency) of noun cat
tracked vehicle
true cat
whip
woman
X-radiation
X-raying
但它有点令人讨厌,需要进一步清理。
下面是我的脚本的样子,我想得到的是猫#n1 ... 8中的所有单词。
脚本
use WordNet::QueryData;
my $wn = WordNet::QueryData->new( noload => 1);
print "Senses: ", join(", ", $wn->querySense("cat#n")), "n";
print "Synset: ", join(", ", $wn->querySense("cat", "syns")), "n";
print "Hyponyms: ", join(", ", $wn->querySense("cat#n#1", "hypo")), "n";
OUTPUT:
Senses: cat#n#1, cat#n#2, cat#n#3, cat#n#4, cat#n#5, cat#n#6, cat#n#7, cat#n#8
Synset: cat#n, cat#v
Hyponyms: domestic_cat#n#1, wildcat#n#3
脚本
use WordNet::QueryData;
my $wn = WordNet::QueryData->new;
foreach $word (qw/cat#n/) {
@senses = $wn->querySense($word);
foreach $wps (@senses) {
@gloss = $wn -> querySense($wps, "syns");
print "$wps : @glossn";
}
}
OUTPUT:
cat#n#1 : cat#n#1 true_cat#n#1
cat#n#2 : guy#n#1 cat#n#2 hombre#n#1 bozo#n#2
cat#n#3 : cat#n#3
cat#n#4 : kat#n#1 khat#n#1 qat#n#1 quat#n#1 cat#n#4 Arabian_tea#n#1 African_tea#n#1
cat#n#5 : cat-o'-nine-tails#n#1 cat#n#5
cat#n#6 : Caterpillar#n#2 cat#n#6
cat#n#7 : big_cat#n#1 cat#n#7
cat#n#8 : computerized_tomography#n#1 computed_tomography#n#1 CT#n#2 computerized_axial_tomography#n#1 computed_axial_tomography#n#1 CAT#n#8
PS我从来没有写过perl,但从早上开始就一直在研究perl脚本 - 现在可以理解基本的东西了。 只需要知道是否有更清晰的方法来使用api文档来做到这一点 - 无法从API或用户组档案中找出答案。
更新:
我想我会解决:
wn cat -synsn | sed '1,6d' |sed 's/Sense [[:digit:]]//g' | sed 's/[[:space:]]*=> //' | sed '/^$/d'
sed岩石!
我想你会发现下面这些...
http://marimba.d.umn.edu/WordNet-Pairs/
根据WordNet,与X最相似的词是什么?
这些数据旨在回答这个问题,其中相似性基于WordNet :: Similarity的度量。 http://wn-similarity.sourceforge.net
--------------动词数据
这些文件是使用WordNet 3.0使用WordNet :: Similarity版本2.05创建的。 他们根据路径,wup,lch,lin,res和jcn度量显示WordNet中所有成对的动词 - 动词相似性。 路径,wup和lch是基于路径的,而res,lin和jcn则基于信息内容。
截至2011年3月15日,使用以上六个措施的所有动词的成对度量都可用,每个都在他们自己的.tar文件中。 每个* .tar文件都被命名为WordNet-verb-verb-MEASURE-pairs.tar,大约2.0 - 2.4 GB压缩。 在这些.tar文件的每一个中,你会发现25,047个文件,每个动词意义上有一个文件。 每个文件由25,048行组成,其中每行(除第一行)包含WordNet动词感,并与该特定文件中的意义相似。 在这里做数学计算,你会发现每个.tar文件包含大约625,000,000个两两相似值。 请注意,这些是对称的(sim(A,B)= sim(B,A)),因此您拥有超过3亿个唯一值。
--------------名词数据
截至2011年8月19日,使用路径度量的所有名词的成对度量都是可用的。 这个文件被命名为WordNet-noun-noun-path-pairs.tar。 它大约压缩了120 GB。 在这个文件中,你会发现146,312个文件,每个名词意义一个。 每个文件由146,313行组成,其中每行(除第一行)包含WordNet名词性意义,并与该特定文件中的意义相似。 在这里做数学计算,你会发现每个.tar文件包含大约21,000,000,000两两相似值。 注意这些是对称的(sim(A,B)= sim(B,A)),所以你有大约100亿个唯一值。
我们目前正在运行wup,res和lesk,但尚未预计可用日期。
把这是一个脚本,say synonym.sh
wn $1 -synsn | sed '1,6d' |sed 's/Sense [[:digit:]]//g' | sed 's/[[:space:]]*=> //' | sed '/^$/d' | sed 's/ //g' | grep -iv $1 | tr 'n' ','
wn $1 -synsv | sed '1,6d' |sed 's/Sense [[:digit:]]//g' | sed 's/[[:space:]]*=> //' | sed '/^$/d' | sed 's/ //g' | grep -iv $1 | tr 'n' ',';echo
从你的Perl脚本
system("/path/synonym.sh","kittens");
system("/path/synonym.sh","cats");
链接地址: http://www.djcxy.com/p/54387.html