周囲の単語に一致する項目を見つける方法は?

周囲の単語に一致する項目を見つける方法は?

周りの単語と一致する単語を探したいです。私もそれが速いことを願っています。

これが私が得るものです:

grep -o -P '(\w+ ){0,n}match( \w+){0,m}'

nはフレーズの前の単語数、mはフレーズの後の単語数です。 matchは私が探しているフレーズです。

これを行うより速い方法がありますか?

例:

echo word1 word2 word3 123 word4 word5 word6 | grep -o -P '(\w+ ){0,2}123( \w+){0,2}'

=> word2 word3 123 word4 word5

ベストアンサー1

(\w+ )単語または単語の一部と一致します。つまりgrep、すべての単語のすべての文字が潜在的な一致開始と見なされます。あなたの例では、それぞれを考慮します

  • word1
  • ord1
  • rd1
  • d1
  • 1

その後、成功したマッチを進めます(最初からword2)。

単語全体を見つけることに興味があるので、パターンに単語の境界を含めることで、中間単語の一致に対するすべての試みをブロックできます。

grep -P '\<(\w+ ){0,2}123( \w+){0,2}\>'

123これのもう一つの効果は、長い単語内で一致が発生したときの一致を防ぐことです。

これにより、時間が100倍節約されます(テストケース:Ulyssesで「I」という単語を検索)。

「捕まった」部分http://www.regular-expressions.info/examples.html正規表現が遅い理由の良いガイドラインがあります。

おすすめ記事