打ち込みゼロ中小企業のAI導入支援|受注の自動化からFAX受注の自動化 専門

コラム仕組みと技術

品名の表記ゆれを、自社の品番に引き当てる方法11通りの書き方で実際に試した結果

品名の表記ゆれを、自社の品番に引き当てる方法(記事の表紙)

取引先が注文書に書く品名は、「鶏もも 2kg」「とりもも2キロ」のように毎回少しずつ違います。これを自社の品番に自動で結び付けるには、書き方をそろえる、言い換え表で置き換える、似ている度合いで候補を並べる、の3段階で処理し、迷うものだけを人に回すのが確実です。架空の食品卸の商品12品と11通りの書き方で、実際にコードを動かした結果を載せます。(2026年10月時点)

全体の流れと費用はFAX受注の自動化のページにまとめています。

この記事の要点

  • 品名の表記ゆれは、書き方をそろえる→言い換え表で置き換える→似ている度合いで候補を並べる、の3段階で品番に引き当てます。
  • 架空の商品12品と11通りの書き方で試すと、つまずいたのはカタカナとひらがなの違いと、容量だけが違う商品でした。
  • 書かれた数字を含まない候補の点を下げると、容量違いの取り違えを防げます。
  • 候補を挙げるのはAIに任せられますが、最後に品番を決めるのは言い換え表とルールにしておくのが安全です。
目次
  1. 取引先の書いた品名は、どうやって自社の品番に結び付けますか?
  2. 実際に11通りの書き方で試すと、どうなりましたか?
  3. 間違えやすいのは、どんな書き方ですか?
  4. コードは、どのくらいの量ですか?
  5. AI(大規模言語モデル)に任せれば、済むのではありませんか?
  6. このサイトで相談するには?
  7. よくある質問

取引先の書いた品名は、どうやって自社の品番に結び付けますか?

書き方をそろえる(正規化)、言い換え表で置き換える、商品マスタの品名と似ている度合い(類似度)で候補を並べる、の3段階で処理します。1位の点が十分に高く、2位と差があるときだけ自動で決め、それ以外は「要確認」として人に見せます。

AI-OCR(紙の文字を読み取るAI)が読めるのは、注文書に書かれた文字までです。「冷凍えだ豆」が自社の「V-1180 冷凍枝豆 500g」のことだと分かるには、別の仕組みが要ります。ベテランの担当者が頭の中でしている引き当てを、手順として書き出すのがこの部分です。

段階 すること 例
1. 正規化 全角・半角、単位、記号、空白をそろえる 「ダシ醤油1.8L」→「だし醤油1.8l」
2. 言い換え表 取引先の言い方を、自社の言い方に置き換える 「えだ豆」→「枝豆」、「むね」→「むね肉」
3. 類似度 商品マスタの全品名と比べて、点数順に並べる 1位 0.93、2位 0.66 なら1位で決める

実際に11通りの書き方で試すと、どうなりましたか?

11通りのうち8通りは正しい品番に自動で決まり、3通りは要確認になりました。要確認のうち2通りは、人が見ても注文書だけでは決められない書き方で、要確認にしたのが正しい判断でした。

架空の食品卸「みなと食品」の商品12品(鶏もも肉、だし醤油の1.8Lと500ml、濃口醤油、生ビール樽の10Lと20Lなど)を商品マスタにし、飲食店がFAXに書きそうな11通りの書き方を引き当てました。点は0〜1で、1が完全に一致です。自動で決める条件は「1位が0.6以上で、2位との差が0.1以上」にしています。

取引先の書き方 そろえた後 1位の候補 点 2位との差 判定
鶏もも 2kg 鶏もも肉2kg M-2031 鶏もも肉 2kg 1.00 0.29 自動
とりもも2キロ とりもも肉2kg M-2031 鶏もも肉 2kg 0.80 0.27 自動
冷凍えだ豆 冷凍枝豆 V-1180 冷凍枝豆 500g 0.67 0.42 自動
だし醤油 1.8 だし醤油1.8 S-0412 だし醤油 1.8L 0.93 0.27 自動
ダシ醤油1.8L ダシ醤油1.8l S-0450 濃口醤油 1.8L 0.75 0.00 要確認
生ビール樽 10L 生ビ-ル樽10l B-0010 生ビール樽 10L 1.00 0.12 自動
生樽 生樽 B-0020 生ビール樽 20L 0.40 0.00 要確認
醤油 1.8 醤油1.8 S-0450 濃口醤油 1.8L 0.77 0.00 要確認
キャベツ ケース キャベツケ-ス V-0021 キャベツ 1ケース(10玉) 0.78 0.63 自動
むね 2kg むね肉2kg M-2032 鶏むね肉 2kg 0.92 0.31 自動
ウーロン 2L ウ-ロン茶2l D-0301 ウーロン茶 2L 1.00 0.60 自動

表は、このあと載せるコードを実際に動かした出力です。「生樽」は10Lか20Lか、「醤油 1.8」はだし醤油か濃口醤油か、注文書だけでは決まりません。こうした書き方を無理に自動で決めないことが、この仕組みでいちばん大事な点です。

言い換え表の効き目も確かめました。言い換え表を外すと、「冷凍えだ豆」の点は0.67から0.46に下がり、自動から要確認に変わりました。言い換え表は数行でも効きます。

間違えやすいのは、どんな書き方ですか?

カタカナとひらがなの違いと、容量や重さの数字だけが違う商品です。どちらも、点数の付け方を少し変えるだけで防げました。

1つ目は「ダシ醤油」です。「ダシ」と「だし」は人には同じに見えますが、文字としては別なので、点が下がり、濃口醤油と同点になりました。カタカナをひらがなにそろえる手順を足すと、正しい「S-0412 だし醤油 1.8L」に1.00で決まりました。

2つ目は「生ビール樽 10L」です。10Lと20Lは1文字しか違わないので、2位との差が0.12しかなく、決める条件の0.1をぎりぎりで超えただけでした。注文書に書かれた数字(10)を含まない候補の点を半分にする手順を足すと、差は0.56に広がりました。

書き方 改良前 改良後 足した手順
ダシ醤油1.8L 濃口醤油 0.75・差0.00(要確認) だし醤油 1.00・差0.25(自動) カタカナをひらがなにそろえる
生ビール樽 10L 10L 1.00・差0.12(自動) 10L 1.00・差0.56(自動) 数字の合わない候補を下げる
生樽 要確認 要確認 (注文書だけでは決められない)
醤油 1.8 要確認 要確認 (注文書だけでは決められない)

残った「生樽」「醤油 1.8」は、その取引先が過去にどちらを頼んでいたかを見れば、多くの場合は決められます。私が作るときは、取引先ごとの注文の履歴から先に探し、それでも迷うものだけを人に見せる順にしています。

コードは、どのくらいの量ですか?

中心部分は30行ほどで、Pythonの標準ライブラリだけで動きます。特別な製品や高価な仕組みは要りません。難しいのはコードではなく、言い換え表と決める条件を、御社の商品と取引先に合わせて調整するところです。

import re, unicodedata
from difflib import SequenceMatcher

def normalize(s):
    s = unicodedata.normalize('NFKC', s)           # 全角英数・半角カナをそろえる
    s = s.lower().replace('ー', '-')
    s = re.sub(r'(\d+(?:\.\d+)?)\s*(?:リットル|l)\b', r'\1l', s)
    s = re.sub(r'(\d+(?:\.\d+)?)\s*(?:キロ|kg)', r'\1kg', s)
    return re.sub(r'[\s()()・/]', '', s)

def kana(s):                                       # カタカナ → ひらがな
    return ''.join(chr(ord(c) - 0x60) if 'ァ' <= c <= 'ヶ' else c for c in s)

def score(q, name):
    q, name = kana(q), kana(name)
    r = SequenceMatcher(None, q, name).ratio()
    nq = set(re.findall(r'\d+(?:\.\d+)?', q))
    if nq and not nq <= set(re.findall(r'\d+(?:\.\d+)?', name)):
        r *= 0.5                                   # 書かれた数字を含まない候補は下げる
    return r

def match(text, master, alias):
    for k, v in alias.items():                     # 言い換え表(取引先ごと)
        text = text.replace(k, v)
    q = normalize(text)
    ranked = sorted(((score(q, normalize(n)), code) for code, n in master.items()), reverse=True)
    (s1, c1), (s2, _) = ranked[0], ranked[1]
    return c1, ('自動' if s1 >= 0.6 and s1 - s2 >= 0.1 else '要確認')

決める条件の0.6と0.1は、この12品で試して決めた値です。商品の数や名前の付け方で変わるので、実際には御社の過去の注文で「自動にしてよかったか」を数えて決めます。40通りの書き方で線を動かした結果は品番を自動で確定する基準の決め方に載せました。

AI(大規模言語モデル)に任せれば、済むのではありませんか?

候補を挙げるところはAIに任せられますが、最後に品番を決めるのは、言い換え表とルールにしておくのが安全です。同じ書き方には毎回同じ品番が返り、なぜその品番にしたかを後から説明できるからです。

AIは「生樽」を見て「たぶん20Lです」と、もっともらしく答えてしまうことがあります。人なら迷う場面で迷わないのは、受注では困ります。私は、AIには「読み取り」と「言い換え表に足す候補の提案」を任せ、決定は表とルールで行う分担にしています。全体の流れはFAX注文書をAIで受注データにする仕組みで説明しています。

このサイトで相談するには?

御社の商品マスタと、取引先の書き方の例があれば、どのくらいが自動で決まりそうかを無料相談で一緒に見積もれます。言い換え表の作り方そのものは品番引き当ての対応表の作り方にまとめています。自動化の費用は一式30万円〜です。

よくある質問

品番の引き当ては、AIに全部任せられますか?
候補を挙げるのはAIが得意ですが、最後の決定は言い換え表とルールで行うほうが、同じ結果が毎回出て、理由も説明できます。
言い換え表は、最初に全部作る必要がありますか?
ありません。よく出る数十件から始め、人が要確認を直すたびに足していけば、自動で決まる割合が少しずつ増えます。
商品が数千点あっても使えますか?
使えます。取引先ごとに過去に頼まれた品物から先に探すと、候補が絞られて間違いも減ります。

出典

  1. Python 標準ライブラリ difflib(SequenceMatcher)(2026年10月14日確認)
  2. Python 標準ライブラリ unicodedata(NFKC 正規化)(2026年10月14日確認)