小さな単語セット(具体性のために3つと仮定)が与えられますが、より一般的には、2つのn
単語が互いに近い状況をファイルから検索したいと思います。近接性の観点から、2つの単語が最大k
1文字離れているとしますk
。ここでは定数です。
理由:私の受信トレイ()で/var/spool/mail/username
特定のキーワードを含む特定のEメールを探しています。このキーワードがどのように見えるかわかりません。ところで、比較的よく使われる単語が一つあります。 2つの単語が互いに非常に近い場合は一般的ではありません。
具体的な動機付けの例:
「アルミニウム」、「荷物」、「保管」。
この場合は、荷物に関するメールを検索しています。
n
に関しては、ソリューションがk
最高になります。
これを複数のファイルに適用する方法に関するいくつかのガイドラインが役に立ちます。
ソリューションがどの言語になっているかは関係ありません。
ベストアンサー1
以下を考慮することができます。
1) glark, which has an option:
( expr1 --and=NUM expr2 )
Match both of the two expressions, within NUM lines of each other.
2) bool, with expressions like:
bool -O0 -C0 -D5 -b "two near three"
3) peg, which accepts options like:
peg "/x/ and near(sub { /y/ or /Y/ }, 5)"
glarkのコードは次の場所にあります。https://github.com/jpace/glarkそしておそらくいくつかのリポジトリにいるでしょう。
boolとpegのいくつかの詳細:
bool print context matching a boolean expression (man)
Path : ~/executable/bool
Version : 0.2.1
Type : ELF 64-bit LSB executable, x86-64, version 1 (SYS ...)
Help : probably available with -h,--help
Home : https://www.gnu.org/software/bool/ (doc)
peg Perl version of grep, q.v. (what)
Path : ~/bin/peg
Version : 3.10
Length : 4749 lines
Type : Perl script, ASCII text executable
Shebang : #!/usr/bin/env perl
Repo : Debian 8.9 (jessie)
Home : http://piumarta.com/software/peg/ (pm)
Home : http://www.cpan.org/authors/id/A/AD/ADAVIES/peg-3.10 (doc)
頑張って...乾杯、drl