是否有任何现有的库或方法可以让您找出单词集最可能的颜色?例如,黄瓜、苹果、草,它给了我绿色。以前有人朝那个方向工作吗?
5 回答
如果我必须这样做,我将尝试使用 google image 或其他词根据单词搜索图像,并识别前 n 个结果中最常见的颜色。
如果可能的话,我建议使用一组严格定义的资源,例如 Wikipedia 和Wordnet。例如,这里是“熊猫”的 Wordnet:
S:(n) 大熊猫、熊猫、熊猫熊、浣熊、Ailuropoda melanoleuca(中国和西藏竹林的大型黑白草食性哺乳动物;在某些分类中被认为是熊科或单独科的成员大熊猫科)
S:(n)小熊猫、小熊猫、熊猫、熊猫、猫熊、Ailurus fulgens(红褐色旧大陆浣熊状食肉动物;在某些分类中被认为与大熊猫无关)
由于简洁、精心构造的语言,任何颜色词都很可能很重要。在这里你可以看到熊猫既有黑白的,也有红棕色的。
如果您确定维基百科的子部分(例如“植物描述”),这将有助于提高结果的相关性。此外,维基百科中的第一张图片很可能是最好的“权威”图片。
但是,与所有统计方法一样,您会得到误报(和否定,尽管这些可能不是问题)。
Daniel 和 Xi.lin 的回答是非常好的想法。沿着同一轴,我们可以将两者与类似于 Xilin 的但更简单的方法相结合:使用您想要查找与“颜色”过滤器相关联的颜色的词查询 Google 图像(参见左下角的栏中)。并查看哪种颜色产生更多结果。
这听起来像是一个非常合理的 NLP 问题,而且很容易通过 map-reduce 处理。
确定您称之为颜色的单词和短语列表 ['blue'、'green'、'red'、...]。浏览大量句子,对于提到特定颜色的句子,对于该句子中的每个其他单词,(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