我安装了Wordnet::Similarity和Wordnet::QueryData作为计算信息内容得分和这些模块附带概率的简便方法。但是我坚持这个基本问题:给出一个单词,打印出类似于它的n个单词 - 迭代同义词并执行join
这一点应该不难。
使用wn
命令并将其与大量tr
,sort | uniq
相关联,我可以获得所有字词:
wn cat -synsn | grep -v Sense | tr '=' ' ' | tr '>' ' ' | tr '\t' ' ' | tr ',' '\n' | sort | uniq
输出
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
但它有点讨厌,需要进一步清理。
我的剧本的样子如下所示,我想要的是cat#n1 ... 8中的所有单词。
SCRIPT
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";
输出:
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
SCRIPT
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 : @gloss\n";
}
}
输出:
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
P.S。 我以前从未写过perl,但是从早上起就开始研究perl脚本 - 现在可以理解基本的东西。只需要知道使用api文档是否有更简洁的方法来做到这一点 - 无法从api或用户组档案中找到答案。
更新
我想我会安定下来:
wn cat -synsn | sed '1,6d' |sed 's/Sense [[:digit:]]//g' | sed 's/[[:space:]]*=> //' | sed '/^$/d'
sed rock!
答案 0 :(得分:4)
我想你会发现以下内容......
http://marimba.d.umn.edu/WordNet-Pairs/
根据WordNet,与X最相似的单词是什么?
此数据旨在回答相似性所基于的问题 来自WordNet的措施::相似性。 http://wn-similarity.sourceforge.net
这些文件是使用WordNet :: Similarity版本2.05创建的 WordNet 3.0。它们显示了所有成对动词 - 动词的相似之处 在WordNet中根据路径,wup,lch,lin,res和jcn度量。 路径,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,但没有 预计可用日期。
答案 1 :(得分:0)
这是一个脚本,比如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");