使用perl的Wordnet同义词

Tat*_*ata 7 perl wordnet

我安装了Wordnet :: SimilarityWordnet :: QueryData,作为计算这些模块附带的信息内容得分和概率的简便方法.但是我坚持这个基本问题:给出一个单词,打印出类似于它的n个单词 - 这对于迭代同义词和执行来说应该不难join.

使用wn命令并将它与大量的管道一起使用tr,sort | uniq我可以得到所有的话:

 wn cat -synsn | grep -v Sense | tr '=' ' ' | tr '>' ' ' | tr '\t' ' ' | tr ',' '\n' | sort | uniq
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

但它有点讨厌,需要进一步清理.

我的脚本看起来如下,我想要的是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";
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

脚本

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";
    }

}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

更新:

我想我会满足于:

 wn cat -synsn | sed '1,6d' |sed 's/Sense [[:digit:]]//g' | sed 's/[[:space:]]*=> //' | sed '/^$/d'
Run Code Online (Sandbox Code Playgroud)

sed rock!

小智 4

我想你会发现以下内容很有帮助......

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

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

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

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

这些文件是使用 WordNet 3.0 通过 WordNet::Similarity 版本 2.05 创建的。它们根据路径、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,但尚无预计的可用日期。