毎度毎度お世話になります。m(._.)m
検索プログラムを作りたいんですが、
あいまい検索ではなく、単語一致検索をしたいです。
テキストにTEXTBOXと入力されているときに、”EXT"で検索するとHITする感じです。
”TEX”と入力しても、すべて単語1つずつはあるけど、1つの単語として検索文字列と
一致しないので、HITしない感じです。
1文字の文字列検索はできるんですけど、何文字かわからない、単語の完全一致の検索って
VBでできるんですか?
>”TEX”と入力しても、すべて単語1つずつはあるけど、1つの単語として検索文字列と
>一致しないので、HITしない感じです。
上記の部分の意味がよくわからないのですが、
1文字ずつHITさせるのではなく、入力された文字列としてHitさせたいってことでしょうか?
Instr関数ではだめなのでしょうか?
こんにちは、ななこ さん。 IMAと申します。
>テキストにTEXTBOXと入力されているときに、”EXT"で検索するとHITする感じです。
>”TEX”と入力しても、すべて単語1つずつはあるけど、1つの単語として検索文字列と
>一致しないので、HITしない感じです。
テキストに"TEXTBOX"と入力されているときに、
"TEXT" 或いは "BOX" で検索するとHITし、
"EXT" で検索するとHITしない感じですか?
日本語の例だと
テキストに"今日は天気がよい"と入力されているときに、
"今日" 或いは "よい" で検索するとHITし、
"は天気" や "気がよい" で検索するとHITしない感じですか?
私も、上手な方法があれば知りたいです。(^^;)
日本語の場合は単語がスペースで区切られていないので、形態素解析を行い、
得られた単語それぞれの品詞を考慮しながら判断することになると思います。
それようの専用ソフトもあるでしょうが、非常に高価なはずです。
私は、趣味でコーディングしている程度ですので、Kakasi や 茶筅 などを
利用させていただき、簡単なロジックで逃げています。
※ 上の"気がよい"といったものが、対象となる可能性もあるはずですし、
正確にやろうとすると言語学的な知識が要求されるでしょうね。
また別のアプローチとして、日本語を対象にGREP検索し、検索結果を
キーワードが中央に並ぶKWIC形式で表示するようなソフトもあります。
御参考までに
検索対象文字列
Dim A As String '検索文字
Dim B As String 'とすると
Dim Hit as boolean
Hit=false
for i= 1 to len(A)-len(b)
if mid(A,i,len(b))=b then
hit=true
exit for
end if
next
msgbox("Hit=" & Hit)
外部DLLを使ってもいいなら、BASP21のBregexp.dllを使うという手も…。
(でも、ちゃんと日本語区切りを認識してくれるのかどうか、わからないです…)