FASTERリストから特定の単語を含む文字列を削除する方法

hyhno01:

sentencensのリストがありますsentences = ['Ask the swordsmith', 'He knows everything']目標は、単語リストから単語というものを文章を削除することですlexicon = ['word', 'every', 'thing']これは、以下のリストの内包表記を使用して達成することができます。

newlist = [sentence for sentence in sentences if not any(word in sentence.split(' ') for word in lexicon)]

if not word in sentenceそれはまた、辞書から単語が埋め込まれている単語を含む文章を削除すると同じように、十分条件ではないが、例えばがword中に埋め込まれているswordsmith、とeveryし、thing中に埋め込まれていますeverything

しかし、文章の私のリストは1.000.000文章や200.000語の私の辞書で構成されています。言及したリストの理解を適用すると、時間を取ります!そのため、私は別のリストから単語を含むリストから文字列を除去するためのより高速な方法を探しています。助言がありますか?たぶん、正規表現を使用していますか?

マッド物理学者:

であなたの検索を行いますsetこれは、高速、それを行い、あなただけの辞書で単語全体を探しので、封じ込めの問題を軽減します。

lexicon = set(lexicon)
newlist = [s for s in sentences if not any(w in lexicon for w in s.split())]

これはかなり効率的でw in lexiconありO(1)、操作、およびany短絡。主な問題は、適切に言葉にあなたの文章を分割されます。正規表現は、必然的にカスタマイズされたソリューションよりも遅くなるだろうが、最良の選択かもしれ、あなたは句読点等に対するようにしたいどのように堅牢に応じました。例えば:

lexicon = set(lexicon)
pattern = re.compile(r'\w+')
newlist = [s for s in sentences if not any(m.group() in lexicon for m in pattern.finditer(s))]

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=8354&siteId=1