4
from glob import glob
pattern = "D:\\report\\shakeall\\*.txt"
filelist = glob(pattern)
def countwords(fp):
    with open(fp) as fh:
        return len(fh.read().split())
print "There are" ,sum(map(countwords, filelist)), "words in the files. " "From directory",pattern
import os
uniquewords = set([])
for root, dirs, files in os.walk("D:\\report\\shakeall"):
    for name in files:
        [uniquewords.add(x) for x in open(os.path.join(root,name)).read().split()]
print "There are" ,len(uniquewords), "unique words in the files." "From directory", pattern

これまでのところ、私のコードはこれです。これは、一意の単語の数と単語の総数をカウントしますD:\report\shakeall\*.txt

問題は、たとえば、このコードが異なる単語code code.を認識することです。code!したがって、これは一意の単語の正確な数に対する答えにはなりません。

Windows テキスト エディターを使用して 42 個のテキスト ファイルから特殊文字を削除したい

または、この問題を解決する例外ルールを作成します。

後者を使用する場合、コードをどのように作成すればよいですか?

テキストファイルを直接変更するようにしますか? または、特殊文字をカウントしない例外を作成しますか?

4

3 に答える 3

9
import re
string = open('a.txt').read()
new_str = re.sub('[^a-zA-Z0-9\n\.]', ' ', string)
open('b.txt', 'w').write(new_str)

英数字以外のすべての文字を空白に変更します。

于 2012-08-10T12:57:21.113 に答える
2

私はかなり新しいので、これが非常にエレガントであるとは思えませんが、1つのオプションは、文字列を読み込んでから string.translate() を実行して句読点を取り除くことです。これは、バージョン2.7のPythonドキュメントです(使用していると思います)。

実際のコードに関しては、次のようなものかもしれません (しかし、私よりも優れた誰かが確認/改善できるかもしれません):

fileString.translate(None, string.punctuation)

ここで、「fileString」は、open(fp) が読み取った文字列です。「None」は、変換テーブル (通常、一部の文字を実際に別の文字に変換するために使用される) の代わりに提供され、2 番目のパラメーター string.punctuation (すべての句読記号を含む Python 文字列定数) は、文字列から削除される文字のセットです。

上記が機能しない場合は、次のように変更できます。

inChars = string.punctuation
outChars = ['']*32
tranlateTable = maketrans(inChars, outChars)
fileString.translate(tranlateTable)

クイック検索で見つけた同様の質問に対する回答が他にもいくつかあります。それらからさらに多くを得ることができる場合に備えて、ここにもそれらをリンクします.

Python リスト項目から句読点を削除する

文字列からすべての特殊文字、句読点、およびスペースを削除します

Python 2.x で特定の句読点を取り除く


最後に、私が言ったことが完全に間違っている場合は、コメントしてください。他の人が私が言ったことを試してイライラしないように、コメントを削除します.

于 2012-08-10T13:22:37.563 に答える
0
import re

次に交換

[uniquewords.add(x) for x in open(os.path.join(root,name)).read().split()]

[uniquewords.add(re.sub('[^a-zA-Z0-9]*$', '', x) for x in open(os.path.join(root,name)).read().split()]

これにより、各単語をセットに追加する前に、末尾の英数字以外の文字がすべて削除されます。

于 2012-08-10T13:03:56.193 に答える