1

通常、検索するときは、ストーリーのリストがあり、検索文字列を提供し、指定された検索文字列がストーリーと一致する結果のリストを期待します。

私がやろうとしていることは、その反対です。検索文字列のリストと1つのストーリーを提供し、どの検索文字列がそのストーリーに一致するかを調べます。

これはreで実行できますが、ここでのケースは、solrでサポートされている複雑な検索クエリを使用したい場合です。クエリ構文の詳細については、こちらをご覧ください。注:ブーストは使用しません。

基本的に、以下のサンプルコードでdoisitmatch関数のポインタを取得したいと思います。

def doesitmatch(contents, searchstring):
    """
    returns result of searching contents for searchstring (True or False)
    """
    ???????
    ???????


story = "big chunk of story 200 to 1000 words long"
searchstrings = ['sajal' , 'sajal AND "is a jerk"' , 'sajal kayan' , 'sajal AND (kayan OR bangkok OR Thailand OR ( webmaster AND python))' , 'bangkok']

matches = [[searchstr] for searchstr in searchstrings if doesitmatch(story, searchstr) ]

編集:さらに、以下のようなluceneクエリを正規表現に変換するモジュールが存在するかどうかを知りたいと思います。

sajal AND (kayan OR bangkok OR Thailand OR ( webmaster AND python) OR "is a jerk")
4

6 に答える 6

0

おそらく遅いですが、簡単な解決策:

ストーリーと各文字列について検索エンジンにクエリを実行します。何かを返す場合は、一致します。

それ以外の場合は、検索構文を自分で実装する必要があります。「title:」などが含まれている場合、これはかなり複雑になる可能性があります。あなたの例のANDとORだけの場合、それはあまり毛深いことのない再帰関数です。

于 2009-07-09T13:25:06.297 に答える
0

少し前に、私はluceneのpython実装を探しましたが、純粋なpythonテキストベースのリサーチエンジンであるWooshに出くわしました。多分それはあなたのニーズを統計するでしょう。

pyLuceneを試すこともできますが、私はこれを調査しませんでした。

于 2009-07-09T13:42:29.143 に答える
0

AppEngine で Python を作成している場合は、AppEngine Prospective Search Service を使用して、まさにここでやろうとしていることを実現できます。参照: http://code.google.com/appengine/docs/python/prospectivesearch/overview.html

于 2011-08-22T19:44:27.650 に答える
0

これが疑似コードの提案です。記事の識別子を検索用語と共にインデックスに保存して、検索結果でそれを取得できると想定しています。

def search_strings_matching(story_id_to_match, search_strings):
    result = set()
    for s in search_strings:
        result_story_ids = query_index(s) # query_index returns an id iterable
        if story_id_to_match in result_story_ids:
            result.add(s)
    return result 
于 2009-07-09T14:15:58.307 に答える
0

すでに問題を解決しているので、これはおそらくあまり興味がありませんが、あなたが説明していることはProspective Searchのように聞こえます。彼らはやって来ます。

Lucene のMemoryIndexは、このような目的のために特別に設計されたクラスであり、あなたの場合、単一のドキュメントに対して多くのクエリを実行するのに十分効率的かもしれません。

ただし、これは Python とは関係ありません。このようなものをJavaで書いたほうがいいでしょう。

于 2009-07-10T14:25:31.837 に答える