2016-07-12 17 views
1

私は直観に直面しているので、助言を受けたいと思っていました。 ほとんどの場合、正規表現のパターンとして抽出された文字列を使用して、一部の文字列マッチングを行っています。たいてい私はこの状況に腹を立てて、あまりにもうまくいくでしょう。正規表現 - テキストの部分文字列をパターンの部分文字列に一致させる

私はいくつかのデータ(Python regexパッケージ)から以下のパターンを抽出したとしましょう。

pattern = 'the quick brown fox jumps over the lazy dog' 

ここで、ほとんどの場合、最初の文字列のように見える文字列に一致させる必要があります。

if re.search("("+pattern+"){e<=2}", string): 
    print(True) 
:私は試してみて、私は現在、次のようになりますこれは、何をしてきたような何かを行う場合ので最初と最後の文字の

string = 'quick brown fox jumps over the lazy' 
string2 = 'and then a quick brown fox jumps onto the cat' 

は、明らかに私は試合を取得することはありません

残念ながら、エラー数には一貫性がなく、パターンの先頭および/または末尾に多くの文字が存在する可能性があります。私がこの問題に遭遇するならば、先験的なを知っていないとすれば、パターンの十分な部分文字列がそれにマッチするならば、私はマッチを得るために何かできるでしょうか?私はこれを説明するためにLevenshteinの距離を見ましたが、(長さによって正規化した後に)一致する文字列の長さに非常に敏感であるような閾値を設定する必要があります。私はそれが欲しいときにマッチを得る。そこに他のオプションや結果を正規化するためのより良い方法はありますか?

また、私がすることができないことは、私がチェックしているテキストに適切なエントリが実際には現れないことがあるため、常にベストマッチを取ることです。

これで助けになると思われる正規表現パッケージには何も載っていませんか?

+0

あなたは 'nltk'をチェックアウトしましたか?あなたの弦の中の単語の譜表の周波数を比較したいと思うように思えます。私は 'nltk'がそれを支持していると思います。 http://textminingonline.com/dive-into-nltk-part-iv-stemming-and-lemmatization – dashiell

+0

*パターンの十分な部分文字列*とは何ですか?それはあなた自身が計算してLevensteinの距離関数と一緒に使用しなければならない値です。 –

+0

'string = 'のようにインターリーブされた単語はどうですか?すばやく茶色の灰色の狐のブログがジャンプします。 – dawg

答えて

0

Oufは、(私はPythonの開発者ではないよ)これで来てくれかなり時間がかかりましたが、これはトリックを行う必要があります。ここでテスト

import re 

sentence = "the quick brown fox jumps over the lazy dog" 
string = 'quick brown fox jumps over the lazy' 
string2 = 'and then a quick brown fox jumps onto the cat' 
count1 = 0 
count2 = 0 


pattern = re.sub(
    '(\w+\s*)', 
    '\\1|', 
    sentence 
) 

pattern ="(?:(?!" + pattern.rstrip("|") + ").|" + re.sub(
    '(\w+\s*)', 
    '(\\1){0,1}', 
    sentence 
) + ")+" 

results = re.match(
    pattern, 
    string 
) 

total = len(results.groups()) 

for index in range(1, total): 

    if results.group(index): 
     count1 = count1 + 1 

results = re.match(
    pattern, 
    string2 
) 

for index in range(1, total): 

    if results.group(index): 
     count2 = count2 + 1 

message = 'The following string:"' + string + '" matched ' + str(count1) + ' time and the following string:"' + string + '" matched ' + str(count2) + ' time.' 

http://www.pythontutor.com/visualize.html#mode=edit

enter image description here

関連する問題