我正在使用将我的 GTIN/EAN 查询映射到产品数据的 API。
由于返回的数据来自商家产品 Feed,因此几乎普遍存在以下情况:
我正在寻找一种程序化的方式来实现这两者
考虑以下单个 EAN 查询的示例结果:
我的自制方法如下所示:
word => global occurence 构建一个数组
“妮维雅”=> 7"Deo"=> 5"Deoroller"=> 2…"VE"=> 1"Nivea Deo"=> 12“妮维雅止汗剂 VE”=> 10"Nivea Deo"=> 6"Nivea Deoroller VE"=> 3.34显然,我的方法非常基础,容易出错,并且偏向于包含常用词的短句——产生或多或少令人满意的结果。
最佳答案
由于您现有的指标似乎偏向于较短的短语,因此您应该考虑将双字母组合考虑在内。因此,不要只考虑单个单词的分数,还要考虑连续单词对的分数(例如“nivea deo”、deo roll-on、“roll-on dry”等)。在计算每个标题的分数时,将您可以从标题中生成的每个单字母组和双字母组的分数考虑在内,但可能会赋予双字母组更大的权重,这应该会鼓励您的算法更喜欢更长的短语。
如果您有大量的现有语料库,其中包含大量此类姓名供您使用,请考虑使用类似 TF-IDF 的语料库。
你正在做的事情可以比作只是使用 TF。使用您的全局语料库,您可以计算每个单字母组和双字母组的 idf,这基本上是衡量一个词或短语在整个语料库中的独特性或稀有性的指标。
tf = 您在这些结果中看到 ngram 的次数
idf = 一个 ngram 在所有结果(或至少非常多的结果)中的独特性的全局度量
因此,在计算标题的分数时,不是简单地将其中每个 ngram 的 tf 相加,而是将每个 ngram 的 tf*idf 相加。稀有的 ngram(可能在区分此项与所有其他项方面做得更好)具有更高的 idf,因此您的算法应该给予它们更高的权重。许多垃圾术语(如 Mindestabnahme)的 idf 非常高,但它们的 tf 非常小,因此它们可能不会产生很大的不同。或者剪掉你看到的次数少于 k 次的标记,以消除噪音。
另一个需要了解的 NLP 技巧是 Levenshtein distance .. 这是一种量化两个字符串相似程度的方法。您可以计算结果中每对字符串之间的编辑距离,然后尝试选择与所有其他字符串的平均距离最小的结果。这本身可能效果不佳……但是将这个分数与您现有的方法结合起来可能会帮助您解决一些棘手的问题。
关于php - 从多个句子中选择或生成规范变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10856896/
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这
我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数
我正在尝试按0-9和a-z的顺序创建数字和字母列表。我有一组值value_array=['0','1','2','3','4','5','6','7','8','9','a','b','光盘','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','','u','v','w','x','y','z']和一个组合列表的数组,按顺序,这些数字可以产生x个字符,比方说三个list_array=[]和一个当前字母和数字组合的数组(在将它插入列表数组之前我会把它变成一个字符串,]current_combo['0','0','0']