0

「.html」ファイルを取り込んでストップワードを削除し、Python辞書の他のすべての単語を返すPythonスクリプトがあります。しかし、同じ単語が複数のファイルにある場合は、一度だけ返したいと思います。つまり、ノンストップ ワードをそれぞれ 1 回だけ含めます。

def run():
filelist = os.listdir(path)
regex = re.compile(r'.*<div class="body">(.*?)</div>.*', re.DOTALL | re.IGNORECASE)
reg1 = re.compile(r'<\/?[ap][^>]*>', re.DOTALL | re.IGNORECASE)
quotereg = re.compile(r'&quot;', re.DOTALL | re.IGNORECASE)
puncreg = re.compile(r'[^\w]', re.DOTALL | re.IGNORECASE)
f = open(stopwordfile, 'r')
stopwords = f.read().lower().split()
filewords = {}

htmlfiles = []
for file in filelist:
    if file[-5:] == '.html':
        htmlfiles.append(file)
        totalfreq = {}


for file in htmlfiles:
    f = open(path + file, 'r')
    words = f.read().lower()
    words = regex.findall(words)[0]
    words = quotereg.sub(' ', words)
    words = reg1.sub(' ', words)
    words = puncreg.sub(' ', words)
    words = words.strip().split()

    for w in stopwords:
        while w in words:
            words.remove(w)


    freq = {}
    for w in words:
            words=words
    print words

if __name__ == '__main__':
run()
4

1 に答える 1

6

セットを使用します。見つけたすべての単語をセットに追加するだけです。重複は無視されます。

ファイル内の各単語を返す反復子があると仮定します (これはプレーン テキスト用です。HTML はかなり複雑になります)。

def words(filename):
    with open(filename) as wordfile:
        for line in wordfile:
            for word in line.split():
                yield word

次に、それらを に取得するのsetは簡単です。

wordlist = set(words("words.txt"))

複数のファイルがある場合は、次のようにします。

wordlist = set()
wordfiles = ["words1.txt", "words2.txt", "words3.txt"]

for wordfile in wordfiles:
    wordlist |= set(words(wordfile))

ストップ ワードにセットを使用することもできます。次に、事後的に単語リストからそれらを単純に差し引くことができます。これは、追加する前に各単語がストップ ワードであるかどうかを確認するよりもおそらく高速です。

stopwords = set(["a", "an", "the"])
wordlist -= stopwords
于 2011-03-29T19:48:01.107 に答える