2010-11-30 15 views
0

私は文字列を持っています。私はそれをキーワードやフレーズのために検索し、キーワードやフレーズの前後にあるテキストの一部だけを返したいと思います。 Googleはまさに私が話していることをしています。ここでpythonがキーワードの周りにテキストを切り捨てます

は、私は、Webから取得する文字列です:

「このフィルタは、元の切り捨ての単語Djangoのフィルタのような言葉を切り捨て、代わりに単語の数に基づいてされるので、それは文字の数に基づいています私は、本当に小さなテキストボックスにラベルを表示し、単語で切り捨てると、いつも私に最高の結果を与えてくれなかったウェブサイトを構築するときに、これが必要であることがわかりました。エレガントではない)。

は今、私はこのようなフレーズbuilding a websiteと、出力何かのためにこれを検索したいと言うことができます:

...このために必要なときに私が示さなければならないだろうウェブサイトを構築... "

編集:これをもっと明確にする必要があります。これは、これだけでなく、複数の文字列/フレーズで動作する必要があります。

+1

ほとんどKWIC(コンテキスト内キーワード(複数可))項の –

+0

おかげで結果だ、私は正しいことを探していませんでした知っていました。 – imns

答えて

1

目的のフレーズのインデックスを取得し、そのインデックスの前後に文字列をN文字までスライスする方法を使用します。 N個の文字に最も近い空白を各辺のインデックスから探すことで気になるかもしれません。

Pythonの文字列関数、あなたが必要な正確なものを見つけるために:

http://docs.python.org/py3k/library/strings.html

0
>>> re.search(r'((?:\S+\s+){,5}\bbuilding a website\b(?:\s+\S+){,5})', s).groups() 
("the need for this when building a website where i'd have to show",) 
0

多分このような何か:

import re 
mo = re.search(r"(.{25})\bbuilding a website\b(.{25})", text) 
if mo: 
    print mo.group(1), "<b>building a website</b>", mo.group(2) 
1

他人の回答に構築(特にcababunga代)I関数のように、最大​​25文字(または多くの文字)をとり、最後の単語境界で停止し、素敵なマッチを提供します:

import re 

def find_with_context(haystack, needle, context_length, escape=True): 
    if escape: 
     needle = re.escape(needle) 
    return re.findall(r'\b(.{,%d})\b(%s)\b(.{,%d})\b' % (context_length, needle, context_length), haystack) 

# Returns a list of three-tuples, (context before, match, context after). 

使用法:

>>> find_with_context(s, 'building a website', 25) 
[(' the need for this when ', 'building a website', " where i'd have to show ")] 
>>> # Compare this to what it would be without making sure it ends at word boundaries: 
... # [('d the need for this when ', 'building a website', " where i'd have to show l")] 
... 
>>> for match in find_with_context(s, 'building a website', 25): 
...  print '<p>...%s<strong>%s</strong>%s...</p>' % match 
... 
<p>... the need for this when <strong>building a website</strong> where i'd have to show ...</p> 
+0

私は混乱しています、文脈の長さは何ですか?これを使って例を挙げることはできますか? – imns

+0

@bababa:答えはそれを明確にするために更新されました(そして私が持っていた停止バグを修正しました) –

+0

これはまさに私が探していたものです。私は正規表現にあまり慣れていません。 context_lengthをスペースで切り取って単語が半分にならないようにする方法はありますか? – imns

関連する問題