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))]