互いの 'n'単語内で同じ単語を見つける正規表現


2

私は、互いにn個(例えば、1を超え、5未満)の単語内にある2つ(またはそれ以上)の単語を見つける正規表現検索をまとめることを試みています。目的は散文のテキストを検索し、お互いに近い単語の不要な繰り返しを見つけることです。

例:次のテキストでは、検索で "package:"が識別されるはずです。

郵便配達員は荷物を配達したが、荷物は重かった。

難しいのは、2つの単語が どれか 2つの言葉 同じ 二つの単語。一緒に仕事をする方法を見つけようとしてい * または + (私は正規表現にはかなり慣れていませんが)、もちろん、ワイルドカードはすべての単語にマッチします。のような検索構造はありますか $1 within n of $1 それは正規表現に変換されますか?

回答:


1

私は正規表現があなたがここで必要なものであるとは思わない - あなたが前に言葉を知らない限り、あなたはそれを表現することができない。

だから、私はあなたが先に行って、テキストからすべての単語を解析することができると思います(例えば、ソートしてから重複を取り除く)。次に、見つかったすべての単語に対して、次の正規表現を実行します(ここでは、その単語は foo ):

\bfoo\W+(?:\w+\W+){1,5}?foo\b

ここに、 \b 単語の境界です。その後、実際の単語と一致します。その後、 \W 複数の単語以外の文字です。今、あなたは(で囲まれたグループを始めます () 1〜5回発生する可能性があります( {1,5} )グループ 捕獲されない ?:

見る ここでの実例


素晴らしいです。私がこれを正しく理解していることを確認しましょう。アイデアはのようなものを使用することです tr -s '[[:punct:][:space:]]' '\n' < file ファイルを単語に分割します。 stackoverflow.com/questions/15501652/… )、そしてそれを介してパイプ sort -u。次に、スクリプトを使用して、出力から各単語/項目を上記の正規表現に繰り返し、返されるすべての結果を出力します。 True。明日これを試してみます。それを処理するスクリプトやプラグインを書くのはかなり簡単なはずです。
zoned post meridiem

そのような何か、ええ!もちろん大文字小文字を区別せずにチェックすることも必要でしょう。しかし、入力テキストを小文字にすることでそれを実現できます。
slhck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.