私は20GB以上のニュース記事データを渡しているPythonスクリプトを書いています。 "日付"(100行ごとに1回)の1行ごとに、その記事のタイトルが財務であるかどうかを確認する必要があります。タイトルは形式である:Regex Performance Python
SOME BIG NEWS HAPPENED TO CISCO
私のコードは、(私がset
にキャッシュされている)S & P 500内のすべての会社名をループ、タイトルが一致するかどうかを確認しようとします。
line = "SOME BIG NEWS HAPPENED TO CISCO"
for company in company_names:
pattern = re.compile("(\\b" + company_name + "\\b)", flags=re.IGNORECASE)
if re.search(pattern, line):
do_something()
プログラムをテストするために単なる100,000行以上を別のファイルにコピーしたところ、347秒かかりました。このレートでは、すべてのデータを1週間以上上回ることはありません。
私はファイルをループするのに時間がかかる可能性があることを理解しようとしています。 Python
はコンパイルされたDFAをすべてキャッシュできないため、新しい記事が出現するたびに〜500を構築する必要がありますか?
また、このような長い実行時間の原因になる現在の正規表現には別の問題がありますか?
ご協力いただければ幸いです。
あなたはそれらをすべて500回を再コンパイルする対プリコンパイルされた正規表現のセットを維持してみてください可能性があります(または、TigerhawkT3の
''.join(filter(str.isalpha, line.lower())).split(): do_something()
を使用)また、一般的な単語を取得するためにset intersectionを使用することができます。 – dawg
ありがとう@ダウグ、私は実際に投稿した直後に同じことを考えていました。私はテストしようとしています。 –
regexをまったく使用せず、代わりに 'company_name in line'を試してみることもできます。それはずっと速くなければならないが、同じ複雑さでなければならない。 –