フォルダー内のテキスト ファイルを解析し、特定の検索語の前後に定義済みの数の単語を保存するコードがあります。
たとえば、「日付」や「年」などの単語を検索します。同じ文で両方が見つかった場合、その文は 2 回保存されます。さらに、文中に同じ単語が数回使用されている場合は、複数回保存します。
このようにして、スクレイパーは大量の不要な重複テキストを節約します。
考えられる解決策は 2 つあります。
- 次の検索一致が前の単語のグループのパディングにある場合、それは保存されません。
- たとえば、検索一致の 7 つの単語のグループが前のグループの一部でもある場合、それは保存/削除されません。
私が試したことはすべて、これまでのところ完全に失敗しています:
#helper
def indices text, index, word
padding = 200
bottom_i = index - padding < 0 ? 0 : index - padding
top_i = index + word.length + padding > text.length ? text.length : index + word.length + padding
return bottom_i, top_i
end
#script
base_text = File.open("base.txt", 'w')
Dir::mkdir("summaries") unless File.exists?("summaries")
Dir.chdir("summaries")
Dir.glob("*.txt").each do |textfile|
whole_file = File.open(textfile, 'r').read
puts "Currently summarizing " + textfile + "..."
curr_i = 0
str = nil
whole_file.scan(Regexp.union(/firstword/, /secondword/).each do |match|
if i_match = whole_file.index(match, curr_i)
top_bottom = indices(whole_file, i_match, match)
base_text.puts(whole_file[top_bottom[0]..top_bottom[1]] + " : " + File.path(textfile))
curr_i += i_match
end
end
puts "Done summarizing " + textfile + "."
end
base_text.close