2011-12-23 2 views
4

私は現在、デスクトップソフトウェアを設計中です。直感的な検索機能を実装したいと思っていました。たとえば、「次の月曜日は2〜3pm」または「いつでも2月2日以降、」、さらには「どのようにを使用するか」などの検索クエリを解析するアルゴリズムを作成する必要があります。だから文脈は非常に異なっているかもしれませんが、同じことを求めています。それが私を得るものです。共通のコンテキスト検索を実装する方法 - それにアプローチする方法

私はこれまで行っていたクエリをトークン化する必要がありますか、文字列全体をパターンとして扱い、ある種のライブラリと比較する必要がありますか?

SOが適切な場所であるかどうかわからないので、必要に応じて正しい方向に向けるようにしてください。基本的には、私が取るべきアプローチについていくつかアドバイスをしたいだけです。

ありがとうございました。

+0

parboiledとお考えですか? – fge

+0

正規表現を使用するところはどこでも置き換えられませんか? – rtheunissen

+0

この製品は他のロケール/言語に簡単に翻訳される必要がありますか?時間的表現(「次の月曜日と午後3時」)が非常に慣用的なので、私は尋ねる。 –

答えて

1

Temporal Extraction (i.e. Extract date/time entities from free form text) - How?いくつかの参考になるかもしれません。

"Entity extraction"は、非構造化テキストから人間の認識可能なエンティティ(名前、場所、日付など)を抽出するプロセスです。この記事では、一時的なエンティティを具体的に扱っていますが、一般的には「エンティティ抽出」を読み始めるのがよいでしょう。

エンティティの抽出は言語ごとに行う必要があります。そのため、製品を他のロケールに国際化しようとすると難しいです。 Googleカレンダーでは、一時的なエンティティの抽出と表現の再帰関係について、人間が判読できる形式(「11月の各週の金曜日」)と、私たちが操作する40のロケールのそれぞれに独自の癖があります。

0

事前定義された文法を使用する予定がある場合は、ステートマシンの使用を検討する必要があります。例えばRagel State Machine Compilerがあります。単純な正規表現を使用してステートマシンを定義し、さまざまなターゲット言語の実際のソースコードを生成することができます。

ここでは、SQL選択クエリからすべてのテーブル名を取得するために書いた簡単なパーサーを示します。似たようなことができます(https://gist.github.com/1524986)。

関連する問題