【发布时间】:2017-10-07 21:56:39
【问题描述】:
我正在尝试将 JSON 行格式的产品列表与另一个文件中的产品(也是 JSON 格式)进行匹配。这有时称为记录链接、实体解析、参考协调或仅匹配。
目标是匹配来自第 3 方零售商的产品列表,例如“尼康 D90 12.3MP 数码单反相机(仅机身)”针对一组已知产品,例如“尼康 D90”。
详情
数据对象
产品
{
"product_name": String // A unique id for the product
"manufacturer": String
"family": String // optional grouping of products
"model": String
"announced-date": String // ISO-8601 formatted date string, e.g. 2011-04-28T19:00:00.000-05:00
}
上市
{
"title": String // description of product for sale
"manufacturer": String // who manufactures the product for sale
"currency": String // currency code, e.g. USD, CAD, GBP, etc.
"price": String // price, e.g. 19.99, 100.00
}
结果
{
"product_name": String
"listings": Array[Listing]
}
数据 包含两个文件: products.txt – 包含大约 700 种产品 Listings.txt – 包含大约 20,000 个产品列表
当前代码(使用python):
import jsonlines
import json
import re
import logging, sys
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
with jsonlines.open('products.jsonl') as products:
for prod in products:
jdump = json.dumps(prod)
jload = json.loads(jdump)
regpat = re.compile("^\s+|\s*-| |_\s*|\s+$")
prodmatch = [x for x in regpat.split(jload["product_name"].lower()) if x]
manumatch = [x for x in regpat.split(jload["manufacturer"].lower()) if x]
modelmatch = [x for x in regpat.split(jload["model"].lower()) if x]
wordmatch = prodmatch + manumatch + modelmatch
#print (wordmatch)
#logging.debug('product first output')
with jsonlines.open('listings.jsonl') as listings:
for entry in listings:
jdump2 = json.dumps(entry)
jload2 = json.loads(jdump2)
wordmatch2 = [x for x in regpat.split(jload2["title"].lower()) if x]
#print (wordmatch2)
#logging.debug('listing first output')
contained = [x for x in wordmatch2 if x in wordmatch]
if contained:
print(contained)
#logging.debug('contained first match')
上面的代码将产品文件中的产品名称、型号和制造商的单词分开,并尝试匹配列表文件中的字符串,但我觉得这太慢了,必须有更好的方法来做到这一点。任何帮助表示赞赏
【问题讨论】:
-
什么有效,什么无效?如果你想得到答案,你必须提出一个问题。
-
嵌套的 for 循环遍历所有数据,但我的匹配不是非常准确或精确。解析也需要很长时间
-
您可能希望找到一个具有全文搜索功能的数据库并使用它。还有关于文本规范化的在线资源,可以改进此代码或您对全文搜索数据库的使用。我知道这是开放式的,但它是一个很大的领域,选择一个角落并开始阅读。 :)
标签: javascript python json jsonlines