昨日のコメントの回答ついでにちょっと考え直し。
というか…、普段の仕事で使っている頭で考えたので、
汎用的なデータの展開をやってしまったのが最大の間違い。
まあ何を言いたいのかというと、スペースで区切ったら
英語が単語毎に分解されちまいました6(--;
入力画面作ってテストパターン入れたら見事にばらんばらん。
要するに、「Ninja of the Deep Hours」って入れたら、
NinjaとofとtheとDeepとHoursに分解されて検索したので、
凄い勢いでマッチングしました…orz
ということでロジックを少し考え直し。
まずは数字とスペースを全て半角に展開。
その後「数字 区切り 文字列」か「文字列 区切り 数字」かを確認。
(正規表現より展開して先頭と最後の要素を確認した方が簡単?)
数字部分を除いた所を半角英数字と全角に分離。
後は昨日考えた優先順にチェックすればOKのはず。
お題であった、《取り消し/Cancel(10E)》の場合、
1、数字をチェック
特に見あたらないのでカード名のみ1枚として扱う。
2、文字列を分解
「取り消し」「Cancel(10E)」に分解される。
3、カード名を順に検索
「取り消し」が完全一致するのでこれを採用
と言うことでマッチングは成功。
ただ、「Cancel(10E)」は想定してませんでしたしね~
展開時に「()」も半角に展開して区切り文字として採用すると言うのもありかも。
そうすれば「取り消し」「Cancel」「10E」と分解されますしね。
問題は「Cansel」。
こういうtypo系の間違いに対応する方法は結構面倒なんですよね~
テーブル作って対応とかもあるんですが…
どっかにこういうtypo辞書あったら楽なんですけどね。
ちょっと探してみようかな…(--;
というか…、普段の仕事で使っている頭で考えたので、
汎用的なデータの展開をやってしまったのが最大の間違い。
まあ何を言いたいのかというと、スペースで区切ったら
英語が単語毎に分解されちまいました6(--;
入力画面作ってテストパターン入れたら見事にばらんばらん。
要するに、「Ninja of the Deep Hours」って入れたら、
NinjaとofとtheとDeepとHoursに分解されて検索したので、
凄い勢いでマッチングしました…orz
ということでロジックを少し考え直し。
まずは数字とスペースを全て半角に展開。
その後「数字 区切り 文字列」か「文字列 区切り 数字」かを確認。
(正規表現より展開して先頭と最後の要素を確認した方が簡単?)
数字部分を除いた所を半角英数字と全角に分離。
後は昨日考えた優先順にチェックすればOKのはず。
お題であった、《取り消し/Cancel(10E)》の場合、
1、数字をチェック
特に見あたらないのでカード名のみ1枚として扱う。
2、文字列を分解
「取り消し」「Cancel(10E)」に分解される。
3、カード名を順に検索
「取り消し」が完全一致するのでこれを採用
と言うことでマッチングは成功。
ただ、「Cancel(10E)」は想定してませんでしたしね~
展開時に「()」も半角に展開して区切り文字として採用すると言うのもありかも。
そうすれば「取り消し」「Cancel」「10E」と分解されますしね。
問題は「Cansel」。
こういうtypo系の間違いに対応する方法は結構面倒なんですよね~
テーブル作って対応とかもあるんですが…
どっかにこういうtypo辞書あったら楽なんですけどね。
ちょっと探してみようかな…(--;
コメント