问题确实说明了问题,但我的问题是我希望能够用nltk识别字符串中的颜色,而我能找到的就是如何对词性进行分类。我知道我可以列出我想要支持的所有颜色,但由于我想支持css中可用的所有颜色,这将是一个很长的列表(其中一些很奇怪,如蓝绿色和海蓝宝石)。如果有一个更简单的方法来做到这一点,而不是全部写出来,将不胜感激。谢谢!
修改
当我第一次问我的问题时,我似乎忘了提及我需要的颜色名称与自然语言一样,而不是一起运行,因为它用于语音识别。因此,我选择“Tadhg McDonald-Jensen”的答案是最好的,因为它很好地回答了我原来的问题。但是我也发布了自己的答案,它提供了带空格的颜色名称。希望这有帮助!
答案 0 :(得分:2)
您可以使用the webcolors
package获取其识别的所有css颜色名称,只需检查webcolors.CSS3_NAMES_TO_HEX
的成员资格:
>>> import webcolors
>>> "green" in webcolors.CSS3_NAMES_TO_HEX
True
>>> "deepskyblue" in webcolors.CSS3_NAMES_TO_HEX
True
>>> "aquamarine" in webcolors.CSS3_NAMES_TO_HEX
True
>>> len(webcolors.CSS3_NAMES_TO_HEX)
147
这意味着webcolors.CSS3_NAMES_TO_HEX.keys()
将为您提供python2中的列表或python3中设置的所有css3颜色名称的dictkeys。
答案 1 :(得分:2)
解决方案(对我来说无论如何):
注意:如果你只是需要没有空格的颜色(' deepskyblue'而不是'深蓝天')以前的任何答案都可以使用。 但是,因为我将它与语音识别结合使用I 需要用空间分隔的颜色,就像自然语言一样 使用以下代码(在python 3中)实现,我认为它更完整:
import urllib.request
from bs4 import BeautifulSoup
def getColors():
html = urllib.request.urlopen('http://www.w3schools.com/colors/colors_names.asp').read()
soup = BeautifulSoup(html, 'html.parser')
children = [item.findChildren() for item in soup.find_all('tr')]
colors = [''.join( ' '+x if 'A' <= x <= 'Z' else x for x in item[0].text.replace(u'\xa0', '')).strip().lower() for item in children]
return colors[1:]
然后如果你跑
print(getColors())
你得到:
['alice blue', 'antique white', 'aqua', 'aquamarine', 'azure', 'beige', 'bisque', 'black', 'blanched almond', 'blue', 'blue violet', 'brown', 'burly wood', 'cadet blue', 'chartreuse', 'chocolate', 'coral', 'cornflower blue', 'cornsilk', 'crimson', 'cyan', 'dark blue', 'dark cyan', 'dark golden rod', 'dark gray', 'dark grey', 'dark green', 'dark khaki', 'dark magenta', 'dark olive green', 'dark orange', 'dark orchid', 'dark red', 'dark salmon', 'dark sea green', 'dark slate blue', 'dark slate gray', 'dark slate grey', 'dark turquoise', 'dark violet', 'deep pink', 'deep sky blue', 'dim gray', 'dim grey', 'dodger blue', 'fire brick', 'floral white', 'forest green', 'fuchsia', 'gainsboro', 'ghost white', 'gold', 'golden rod', 'gray', 'grey', 'green', 'green yellow', 'honey dew', 'hot pink', 'indian red', 'indigo', 'ivory', 'khaki', 'lavender', 'lavender blush', 'lawn green', 'lemon chiffon', 'light blue', 'light coral', 'light cyan', 'light golden rod yellow', 'light gray', 'light grey', 'light green', 'light pink', 'light salmon', 'light sea green', 'light sky blue', 'light slate gray', 'light slate grey', 'light steel blue', 'light yellow', 'lime', 'lime green', 'linen', 'magenta', 'maroon', 'medium aqua marine', 'medium blue', 'medium orchid', 'medium purple', 'medium sea green', 'medium slate blue', 'medium spring green', 'medium turquoise', 'medium violet red', 'midnight blue', 'mint cream', 'misty rose', 'moccasin', 'navajo white', 'navy', 'old lace', 'olive', 'olive drab', 'orange', 'orange red', 'orchid', 'pale golden rod', 'pale green', 'pale turquoise', 'pale violet red', 'papaya whip', 'peach puff', 'peru', 'pink', 'plum', 'powder blue', 'purple', 'rebecca purple', 'red', 'rosy brown', 'royal blue', 'saddle brown', 'salmon', 'sandy brown', 'sea green', 'sea shell', 'sienna', 'silver', 'sky blue', 'slate blue', 'slate gray', 'slate grey', 'snow', 'spring green', 'steel blue', 'tan', 'teal', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'white', 'white smoke', 'yellow', 'yellow green']
希望这有帮助!
答案 2 :(得分:1)
我不会使用nltk而是正则表达式。
这项工作对我来说 (如果需要,您只需要更改最后两行和代理设置)
from bs4 import BeautifulSoup
color_url = 'http://colours.neilorangepeel.com/'
proxies = {'http': 'http://proxy.foobar.fr:3128'}#if needed
#GET THE HTML FILE
import urllib.request
authinfo = urllib.request.HTTPBasicAuthHandler()# set up authentication info
proxy_support = urllib.request.ProxyHandler(proxies)
opener = urllib.request.build_opener(proxy_support, authinfo,
urllib.request.CacheFTPHandler)# build a new opener that adds authentication and caching FTP handlers
urllib.request.install_opener(opener)# install the opener
colorfile = urllib.request.urlopen(color_url)
soup = BeautifulSoup(colorfile, 'html.parser')
#BUILD THE REGEX PATERN
colors = soup.find_all('h1')
colorsnames = [color.string for color in colors]
colorspattern = '|'.join(colorsnames)
colorregex = re.compile(colorspattern)
#MATCH WHAT YOU NEED
if colorregex.search(yourstring):
do what you want