0

特定のリスト内の単語が記事に表示されるかどうかを示す次の簡単なコードがあります。

 if not any(word in article.text for word in keywords):
        print("Skipping article as there is no matching keyword\n")

必要なのは、「キーワード」リストに少なくとも 3 つの単語が記事に含まれているかどうかです。含まれていない場合は、記事をスキップする必要があります。

これを行う簡単な方法はありますか?何も見つからないようです。

4

3 に答える 3

3

次のパターンを使用して、条件を満たすアイテムの数をカウントできます。

sum(1 for x in xs if c(x))

ここでは、次のようにします。

if sum(1 for word in keywords if word in article.text) >= 3:
    # 
于 2016-01-05T06:06:29.880 に答える
2

キーワードのセットが十分に大きく、検索される文字列が十分に長いため、多くの場合短絡する価値がある場合、3 つのヒットが見つかったときに停止する他のアプローチのバリエーション ( any1 つのヒットが見つかったときに停止するのと同じように):

from itertools import islice

if sum(islice((1 for word in keywords if word in article.text), 3)) == 3:

3 つのヒットを取得すると、キーワードの繰り返しがすぐに停止し、テストに合格します。

于 2016-01-05T06:33:24.507 に答える
0

テキストとリストがかなり長い

テキストが大きく、多くのキーワードがある場合は、Aho-Corasick アルゴリズム(などgrep -Ff keywords.txt text.txt) を使用noahoできます。

#!/usr/bin/env python
from itertools import islice
from noaho import NoAho  # $ pip install noaho

trie = NoAho()
for word in keywords:
    trie.add(word)
found_words = trie.findall_long(article.text)
if len(list(islice(found_words, 3))) == 3:
    print('at least 3 words in the "keywords" list appear in the article')
于 2016-01-06T02:40:15.870 に答える