人間が入力した特定の語彙を規制するという要件に遭遇しました。おそらく100以上の語彙があります。次のような状況(キーワードは地名よりも複雑です)
以前に処理された場合、擬似コードは次のとおりです。
string TempStr;
if(TempStr.Contains("海淀") && TempStr.Contains("北京") )
{
return "北京市海淀区";
}
else if(TempStr.Contains("山东") && TempStr.Contains("威海") )
{
return "山东省威海市";
}
……//等等一共两百多个else,内容也比较复杂,甚至还有正则匹配之类的
else
{
return "匹配失败";
}
私の仕事はExcelプラグインを作成することなので、100を超えると運用効率にも影響します。また、維持するのが非常に不便で、語彙を追加するのが困難です。
過去2日間で、関連する知識が見つかり、この部分を最適化する計画を立てました。nlpでtf-idfメソッドを使用して、キーワードの類似度を計算します。
全体のプロセスは大まかに、データベースにキーワードマッピングテーブルを作成し、プラグインの起動時にディクショナリとして読み取り、類似性を計算し、使用中にクエリが使用できない場合にマッピングテーブルにアップロードします。