forked from p46318075/CodePattern
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.2 KiB
70 lines
2.2 KiB
|
|
import site
|
|
import os,re
|
|
import string,operator
|
|
|
|
################################################################################
|
|
# 变量
|
|
################################################################################
|
|
testfilename = 'test.txt'
|
|
testfilename = 'pride-and-prejudice.txt'
|
|
testfilename = 'Prey.txt'
|
|
|
|
site_packages = site.getsitepackages()
|
|
for package in site_packages:
|
|
if 'package' in package:
|
|
basePath = package
|
|
stopwordfilepath = os.path.join(basePath, 'cppy','data','stop_words.txt')
|
|
testfilepath = os.path.join(basePath, 'cppy','data',testfilename )
|
|
|
|
|
|
################################################################################
|
|
# 函数
|
|
################################################################################
|
|
def read_file(path_to_file):
|
|
with open(path_to_file,encoding='utf-8') as f:
|
|
data = f.read()
|
|
return data
|
|
|
|
def re_split( data ):
|
|
pattern = re.compile('[\W_]+')
|
|
data = pattern.sub(' ', data).lower()
|
|
return data.split()
|
|
|
|
def get_stopwords( path_to_file = stopwordfilepath ):
|
|
with open(path_to_file,encoding='utf-8') as f:
|
|
data = f.read().split(',')
|
|
data.extend(list(string.ascii_lowercase))
|
|
return data
|
|
|
|
def extract_file_words(path_to_file):
|
|
word_list = re_split( read_file(path_to_file) )
|
|
stop_words = get_stopwords()
|
|
return [ w for w in word_list if ( not w in stop_words ) and len(w) >= 3 ]
|
|
|
|
def extract_str_words(data_str):
|
|
word_list = re_split( data_str )
|
|
stop_words = get_stopwords()
|
|
return [ w for w in word_list if ( not w in stop_words ) and len(w) >= 3 ]
|
|
|
|
def count_word(word, word_freqs, stopwords):
|
|
if word not in stopwords:
|
|
word_freqs[word] = word_freqs.get(word, 0) + 1
|
|
|
|
def get_frequencies(word_list):
|
|
word_freqs = {}
|
|
for word in word_list:
|
|
word_freqs[word] = word_freqs.get(word, 0) + 1
|
|
return word_freqs
|
|
|
|
def sort_dict (word_freq):
|
|
return sorted(word_freq.items(), key=operator.itemgetter(1), reverse=True)
|
|
# return sorted( word_freq, key=lambda x: x[1], reverse=True )
|
|
|
|
def print_word_freqs( word_freqs, n = 10):
|
|
for (w, c) in word_freqs[ :n ]:
|
|
print( w, '-', c )
|
|
|
|
|
|
def test():
|
|
print( 'cppy welcome' ) |