単語セットの最も可能性の高い色を把握できる既存のライブラリまたはメソッドはありますか? たとえば、きゅうり、りんご、草などは緑色になります。以前にその方向で働いていた人はいますか?
5 に答える
そうしなければならない場合は、Google画像などを使用して単語に基づいて画像を検索し、上位nの結果の最も一般的な色を認識しようとします。
I would suggest using a tightly defined set of sources if possible such as Wikipedia and Wordnet. Here, for example, is Wordnet for "panda":
S: (n) giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (large black-and-white herbivorous mammal of bamboo forests of China and Tibet; in some classifications considered a member of the bear family or of a separate family Ailuropodidae)
S: (n) lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (reddish-brown Old World raccoon-like carnivore; in some classifications considered unrelated to the giant pandas)
Because of the concise, carefully constructed language it is highly likely that any colour words will be important. Here you can see that pandas are both black-and-white and reddish-brown.
If you identify subsections of Wikipedia (e.g. "Botanical Description") this will help to increase the relevance of your results. Also the first image in Wikipedia is very likely to be the best "definitive" one.
But, as with all statistical methods, you will get false positives (and negatives , though these are probably less of a problem).
これはかなり合理的な NLP 問題のように思えますが、map-reduce を使用して処理するのは非常に簡単です。
色 [「青」、「緑」、「赤」など] と呼ぶ単語やフレーズのリストを特定します。大量のセンテンスを調べ、特定の色に言及しているセンテンスについて、そのセンテンス内の他のすべての単語について、ファイルに書き留め(word, color_name)
ます。(マップステップ)
次に、コーパスで見た単語ごとに、見たすべての色を集計して、次のようなものを取得します{'cucumber': {'green': 300, 'yellow': 34, 'blue': 2}, 'tomato': {'red': 900, 'green': 430'}...}
(ステップを減らす)
十分に大きなコーパス (ウィキペディアのようなもの) を使用し、非常に小さなカウントや珍しい単語を削除する方法を理解すれば、何百万ものアイテムを色にマッピングする、かなり包括的で堅牢な辞書を作成できるはずです。
これを行う別の方法は、Google で色と問題の単語の組み合わせをテキスト検索し、結果の数が最も多い組み合わせを取得することです。そのための簡単な Python スクリプトを次に示します。
import urllib
import json
import itertools
def google_count(q):
query = urllib.urlencode({'q': q})
url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % query
search_response = urllib.urlopen(url)
search_results = search_response.read()
results = json.loads(search_results)
data = results['responseData']
return int(data['cursor']['estimatedResultCount'])
colors = ['yellow', 'orange', 'red', 'purple', 'blue', 'green']
# get a list of google search counts
res = [google_count('"%s grass"' % c) for c in colors]
# pair the results with their corresponding colors
res2 = list(itertools.izip(res, colors))
# get the color with the highest score
print "%s is %s" % ('grass', sorted(res2)[-1][1])
これは印刷されます:
grass is green
Daniel と Xi.lin の回答は非常に良いアイデアです。同じ軸に沿って、Xilin のアプローチに似ていますが、より単純なアプローチで両方を組み合わせることができます。Google 画像に、関連する色を見つけたい単語 + 「カラー」フィルター (左下のバーを参照) をクエリします。そして、どの色がより多くの結果をもたらすかを確認してください。