Pythonはハリーポッターの小説の単語統計を実装します


請求

HarryPotter5.txt英語小説の単語頻度を数え、最も頻繁に使用される上位20語を数え、それらを印刷またはファイルに書き込みます。


1つは、ファイルを開きます

ファイルを開き、単語内の単語以外の文字をスペースに置き換えます
コード:

#读取小说内容
fp = open('HarryPotter5.txt')
content = fp.read()
#所有标点符号 用空格代替
#匹配非单词字符的字符
content = re.sub('\W',' ',content)
# Python split() 通过指定分隔符对字符串进行切片
words = content.split() # 以空格为分隔符,包含 \n

正規表現

定期的な再

\ W
__は単語文字ではない文字と一致します。_これ\ w反対。ASCIIフラグが使用されている場合、これは[^ a-zA-Z0-9 ]と同等です。LOCALEフラグが使用されている場合、現在の領域で英数字でもアンダースコアでもない文字と一致します。

spilt()関数

Python split()は、区切り文字を指定して文字列をスライスします。パラメータnumに指定された値がある場合は、num +1個の部分文字列を区切ります。
str.split(str = ""、num = string.count(str))。
   str-区切り文字。デフォルトは、スペース、改行(\ n)、タブ(\ t)などを含むすべての空の文字です。
   num-除算の数。デフォルトは-1で、すべてを区切ります

インスタンス

str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
print str.split( );       # 以空格为分隔符,包含 \n
print str.split(' ', 1 ); # 以空格为分隔符,分隔成两个

上記の例の出力は次のとおりです。

['Line1-abcdef'、 'Line2-abc'、 'Line4-abcd']
['Line1-abcdef'、 '\ nLine2-abc \ nLine4-abcd']

次の例では、区切り記号として#記号を使用し、2番目のパラメーターを1として指定し、2つのパラメーターリストを返します。

txt = "Google#Runoob#Taobao#Facebook"
# 第二个参数为 1,返回两个参数列表
x = txt.split("#", 1)
print x

上記の例の出力は次のとおりです。

['Google'、 'Runoob#Taobao#Facebook']


2.単語頻度統計

コードは次のとおりです(例):

#对所有的单词出现次数进行统计
#key-->count  数据结构:Dict字典
wordCounter = {
    
    }
for word in words:
    if word in wordCounter:
        wordCounter[word] += 1
    else:
        wordCounter[word] = 1
#print(wordCounter)

#このプリントアウトは故障しており、並べ替える必要があります


3、単語の並べ替え

コードは次のとおりです(例):

#默认按照增序  使用reverse参数改变顺序
sortedWordCounter = sorted(wordCounter.items(),key=lambda item: item[1],reverse=True)
#print(sortedWordCounter) #这是打印排序完毕的词频

Dictディクショナリの最下層はハッシュ構造です。ハッシュ構造は
wordCounter.items()の並べ替えをサポートせず
、リストに置き換えます。このリストの各要素はタプル
です。タプルには2つの要素があります。要素はキーです。2番目の要素は値です。

効果は次のとおりです。
ここに画像の説明を挿入

ラムダアイテムの説明:item [1]
無名関数と同等の関数lambdaを定義するのと同じです。
効果は次のとおりです
。lambdaitem:item [1]:beforeはパラメーターです。afterは戻り値です。

def func(item):
    return item[1]

匿名関数は、名前がないことを除いて、通常の関数と同じ効果があります。


4、ファイルの出力または書き込み

コードは次のとおりです(例):

#方法一
print(sortedWordCounter[:20])
#方法二
for item in sortedWordCounter[:20]:
    print(item)
#也可以写入文件
fp = open('countwords_result.csv','w')
for (word,count) in sortedWordCounter:
    line = word+','+str(count)+'\n'
    fp.write(line)

ここに画像の説明を挿入

実行後に独自に作成する
ここに画像の説明を挿入

Pythonファイルの書き込み

既存のファイル
への書き込み既存のファイルに書き込むには、open()関数にパラメータを追加する必要があります。
   「a」-追加-ファイルの末尾に追加されます
   「w」-書き込み-既存のコンテンツを上書きします
注釈:「W」メソッドはすべてのコンテンツをカバーします。

#打开文件 "demofile2.txt" 并将内容追加到文件中:

f = open("demofile2.txt", "a")
f.write("Now the file has more content!")
f.close()

# 追加后,打开并读取该文件:
f = open("demofile2.txt", "r")
print(f.read())
#打开文件 "demofile3.txt" 并覆盖内容:

f = open("demofile3.txt", "w")
f.write("Woops! I have deleted the content!")
f.close()

# 写入后,打开并读取该文件:
f = open("demofile3.txt", "r")
print(f.read())

Pythonで新しいファイルを作成するには、open()メソッドを使用し、次のパラメータのいずれかを使用します。
   "x" -create-ファイルが作成されます。ファイルが存在する場合は、エラー
   "a"が返されます-append-指定されたファイルが存在しない場合、ファイルは
   「w」で作成されます-書き込み-指定されたファイルが存在しない場合、ファイルが作成されます

#创建名为 "myfile.txt" 的文件:
f = open("myfile.txt", "x")
#结果:已创建新的空文件!

#如果不存在,则创建新文件:
f = open("myfile.txt", "w")

おすすめ

転載: blog.csdn.net/HG0724/article/details/112298542