我有一个包含数千种不同颜色的数据库。我想将它们映射到列表中的一种颜色。
在此之前,这个颜色数据库只有几百种,我使用类似下面的代码来管理它。随着这个未分类颜色的数据库不断增长,我每周都要花很多时间来绘制 map ,这现在变得无法维护了。
我怎样才能改进这个或者什么是更好的方法?
mapped_colours = ['Red', 'Green', 'Yellow', 'Blue', 'White', 'Black', 'Pink', 'Purple'...]
colour_map_dict = {
'olive': 'Green',
'khaki': 'Green'
}
def classify_colour(colour):
for mp in mapped_colours:
if mp.lower() in colour.lower():
return mp
for map, colour in colour_map_dict.items():
if map in colour.lower():
return colour
这是传入数据的示例。
Resin Dark Wash Indi
Filtered Canyon
999 Black
Winter White/Dove Grey
Midnight/min
White & black
Green/White
Red/White
Multicolor
royal blue
Black Plum Grey
Rose/ Gold
Red And White
Offwht/Gg
Black Gunmetal
Berry/Black
Caramel
Blue Stone Bleached
All Tan
Pale Blush
Tee
White / Multi
00-black
Flat Foundation
Baby Blue
Beige Melange
最佳答案
我会从一个像样的颜色字典开始,将名称映射到给定颜色空间(如 RGB 或 CMYK 或 HSV)中的颜色定义。互联网上有各种套装;您必须预先进行工作以获取它们并将每个数据标准化以使用相同的色彩空间。您可以获得的资源越多,您的映射就越丰富;您的输入集中似乎有大量时尚颜色(油漆?布料?),并且(商业)时尚总是试图通过发明新的颜色名称来区分。
由于颜色空间是有限的,因此您可以通过算法将该空间划分为一组有限的组。然后每个颜色名称将自动映射到给定的组。
环顾四周,一个好的起点是 Wikipedia lists of colour names . compact list应该很容易被机器解析,即使是基本的 HTML 形式,或者你可以使用 MediaWiki API获得更容易解析的原始格式。然后也许添加 other standardised colour name dictionaries ;这里的目标是获得尽可能多的名称所有映射到相同的颜色空间。
我会将这些名称存储在数据库表中,并准备好一个简单的数学公式来将颜色空间划分为您的基本组。这样,表中的任何颜色都可以映射到(比如)RGB,并将 RGB 映射到简单名称。
接下来,build a simple spell-checker trained on your database of names ,然后首先运行您的输入。您那里有一些非常难以处理的数据,但是训练有素的颜色名称拼写检查器可能可以将 Offwht/Gg 清理成可以匹配的数据。并使用 natural text search找到部分匹配项。
请注意,如果您的图像数据包含您收到的这些颜色名称,您会发现 most prevalent colour in that image ,然后您有另一个名称(来自您的输入数据)-> 要使用的颜色空间映射。
关于Python字符串到颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37830929/