同じ単語の異なるインスタンスを照合する方法。
例: 文字列が相乗効果の場合。合わせ方は相乗効果、相乗効果、相乗効果、相乗効果。私は次のように書くことができます:
while(<IN>)
{
chomp $_;
my $line= $_;
$word="Synergy";
if($line=~m/$word(\w+)/i)
{
$line=~s/$word/<Effect>$word<\/Effect>/ig;
}
}
同じ単語の異なるインスタンスを照合する方法。
例: 文字列が相乗効果の場合。合わせ方は相乗効果、相乗効果、相乗効果、相乗効果。私は次のように書くことができます:
while(<IN>)
{
chomp $_;
my $line= $_;
$word="Synergy";
if($line=~m/$word(\w+)/i)
{
$line=~s/$word/<Effect>$word<\/Effect>/ig;
}
}
おそらくやりたいことは、ステミングと呼ばれます。ただし、これが機能するには、テキスト内のすべての単語と検索対象の単語をステミングする必要があります。リストされたすべての単語が同じ語幹になることを願っています。まだテストしていません。
use Lingua::Stem;
my $stemmer = Lingua::Stem->new( -locale => 'EN-UK' );
# first convert text to list of words
my @words;
while(<IN>) {
push @words, split(/\b/, $_); # you can do better here
}
# now stem all words.
my $stemmed_words = $stemmer->stem(@words);
# results in an array ref of stems in the same order as the words have been.
# now stem your search
my $stemmed_search = $stemmer->stem($word);
# and do the search from above inside stemmed array.
今、それはあなたが望むものに依存します。これらすべての単語を何かと交換したい場合は、一致した (語幹を付けた) 単語のインデックスを取得し、テキスト内の同じ位置で置換を行う必要があります。
正規表現を使用する必要があります。一致させたい基準が正確に何であるかは不明ですが、あなたの例では、すべての単語が「synergi」で始まるため、「synergi」if($string =~ \bsynergi\w*\b)
を含むすべての行が検索されます。
Text::Soundex をチェックしてみてください。例えば、
use Text::Soundex;
# The following all return S562
print soundex("synergizes"), "\n";
print soundex("synergism"), "\n";
print soundex("synergically"), "\n";
print soundex("synergistic"), "\n";
さらに読む: Perldoc Text::Soundex