7

我安装了Wordnet::SimilarityWordnet::QueryData作为计算这些模块附带的信息内容分数和概率的简单方法。但我被困在这个基本问题上:给定一个单词,打印 n 个与之相似的单词——迭代同义词集并做join.

使用wn命令并将其与大量的管道一起使用trsort | 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 中的所有单词。

脚本

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

脚本

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

PS 我以前从未写过 perl,但从早上起就一直在研究 perl 脚本——现在可以理解基本的东西了。只需要知道是否有使用 api 文档的更简洁的方法来执行此操作 - 无法从 api 或用户组档案中找出。

更新:

我想我会解决:

 wn cat -synsn | sed '1,6d' |sed 's/Sense [[:digit:]]//g' | sed 's/[[:space:]]*=> //' | sed '/^$/d'

sed 岩石!

4

2 回答 2

4

我想你会发现以下 hepful ...

http://marimba.d.umn.edu/WordNet-Pairs/

根据 WordNet,与 X 最相似的 N 个词是什么?

该数据旨在回答该问题,其中相似性基于 WordNet::Similarity 的度量。http://wn-similarity.sourceforge.net

-------------- 动词数据

这些文件是通过 WordNet::Similarity 2.05 版使用 WordNet 3.0 创建的。它们根据路径、wup、lch、lin、res 和 jcn 度量显示在 WordNet 中发现的所有成对动词-动词相似性。path、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,但还没有预计的可用日期。

于 2011-08-22T14:15:26.133 回答
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");
于 2011-08-21T13:06:35.790 回答