1

wordnet から synonyms() の関数によって "help" の同義語を取得し、次のようになったとします。

Str = synonyms("help")    
Str
[1] "c(\"aid\", \"assist\", \"assistance\", \"help\")"     
[2] "c(\"aid\", \"assistance\", \"help\")"                 
[3] "c(\"assistant\", \"helper\", \"help\", \"supporter\")"
[4] "c(\"avail\", \"help\", \"service\")"  

次に、を使用して1文字の文字列を取得できます

unique(unlist(lapply(parse(text=Str),eval)))

最後に次のようになります。

[1] "aid"        "assist"     "assistance" "help"       "assistant"  "helper"     "supporter" 
[8] "avail"      "service"

上記のプロセスは Gabor Grothendieck によって提案されました。彼/彼女の解決策は良いのですが、クエリ用語を「会社」、「少年」、または他の誰かに変更すると、エラー メッセージが返されることをまだ理解できませんでした。

考えられる理由の 1 つは、おそらく「会社」の「6 番目」の同義語 (以下を参照) が単一の用語であり、「c(\"company\")」の形式に従っていないためです。

synonyms("company")

[1] "c(\"caller\", \"company\")"                                    
[2] "c(\"company\", \"companionship\", \"fellowship\", \"society\")"
[3] "c(\"company\", \"troupe\")"                                    
[4] "c(\"party\", \"company\")"                                     
[5] "c(\"ship's company\", \"company\")"                            
[6] "company"

誰かが親切にこの問題を解決するのを手伝ってくれませんか。どうもありがとう。

4

2 に答える 2

2

これらのシノニムは式のように見える形式になっているため、図のように解析できるはずです。BUT: 上記の元のコードを実行すると、品詞の引数が含まれていないため、シノニム呼び出しからエラーが発生します。

> synonyms("help")
Error in charmatch(x, WN_synset_types) : 
  argument "pos" is missing, with no default

synonymsusesのコードgetSynonymsとそのコードがuniqueラップされていることを確認してください。そのため、実行しているすべての前処理は不要になります (更新した場合);:

> synonyms("company", "NOUN")
[1] "caller"         "companionship"  "company"       
[4] "fellowship"     "party"          "ship's company"
[7] "society"        "troupe"        
> synonyms
function (word, pos) 
{
    filter <- getTermFilter("ExactMatchFilter", word, TRUE)
    terms <- getIndexTerms(pos, 1L, filter)
    if (is.null(terms)) 
        character()
    else getSynonyms(terms[[1L]])
}
<environment: namespace:wordnet>

> getSynonyms
function (indexterm) 
{
    synsets <- .jcall(indexterm, "[Lcom/nexagis/jawbone/Synset;", 
        "getSynsets")
    sort(unique(unlist(lapply(synsets, getWord))))
}
<environment: namespace:wordnet>
于 2011-09-22T13:41:00.013 に答える
2

tryこれは、R のメカニズムを使用してエラーをキャッチする小さなヘルパー関数を作成することで解決できます。この場合、evalがエラーを生成した場合は元の文字列を返し、そうでない場合は次の結果を返しますeval

ヘルパー関数を作成します。

evalOrValue <- function(expr, ...){
  z <- try(eval(expr, ...), TRUE)
  if(inherits(z, "try-error")) as.character(expr) else unlist(z)
}

unique(unlist(sapply(parse(text=Str), evalOrValue)))

プロデュース:

[1] "caller"         "company"        "companionship" 
[4] "fellowship"     "society"        "troupe"        
[7] "party"          "ship's company"

私はあなたのデータをdput再現し、それをここで再現するために使用しました:

Str <- c("c(\"caller\", \"company\")", "c(\"company\", \"companionship\", \"fellowship\", \"society\")", 
"c(\"company\", \"troupe\")", "c(\"party\", \"company\")", "c(\"ship's company\", \"company\")", 
"company")
于 2011-09-22T10:28:40.623 に答える