JSON形式の製品のリストと、JSON形式の別のファイルの製品を一致させようとしています。これは、レコード連結、エンティティ解決、参照調整、または単にマッチングと呼ばれることがあります。リスティングから新しいJSONリストへのJSONlinesの照合
これは、サードパーティの小売業者の商品リスト(例: 「Nikon D90 12.3MPデジタル一眼レフカメラ(ボディのみ)」を既知の製品、例えば"Nikon 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]
}
データ 2つのファイルが含まれています: products.txt - 700の製品 listings.txtの周りに含まれています - (のpythonを使用して)約20,000の製品リストに
現在のコードが含まれています:上記
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')
コードは、最大分割製品ファイル内のproduct_name、model、およびmanufacturerの単語を検索し、リストファイルから文字列を一致させようとしていますが、これは遅すぎるため、より良い方法が必要です。どんな助けにも感謝します
何が問題なのですか?答えが必要な場合は、質問する必要があります。 –
ネストされたforループはすべてのデータを通過しますが、私のマッチはあまり正確ではありません。 –
を解析するには時間がかかりすぎます。フルテキスト検索のデータベースを探して、それを使用したい場合があります。また、このコードや全文検索データベースの使用を改善できるテキスト正規化に関するオンラインリソースもあります。私はこれがオープンエンドであることを知っていますが、それは大きなフィールドです、コーナーを選んで読み始めます。 :) – ldrg