これらのモジュールに付属する情報コンテンツのスコアと確率を計算する簡単な方法として、 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のすべての単語です。
脚本
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 rocks!