Python解析英文电子书并提供词频统计和单词解释

程序用途

最近看英文原版电子书有点苦恼,很多单词联系上下文能懂个大概意思,不影响整体的阅读,但是看完之后又想巩固学习下陌生的单词。于是乎,就想的是能不能用python写个程序把单词根据单词等级(common,advanced)统计出现的频率并解释单词的意思,所以就有了这篇文章啦~

1.下载单词书

首先下载好英文书,这里分享一个免费下载电子书的网站https://zh.z-lib.gs/

以最近喜欢的Nicholas Sparks的《Message in a Bottle》举个🌰~

2.从epub文件中提取内容

1
2
3
4
5
6
7
8
9
10
# 提取 epub 内容为纯文本
def extract_text_from_epub(file_path):
book = epub.read_epub(file_path)
full_text = ""
for item in book.items: # 直接迭代 book.items
if item.media_type == "application/xhtml+xml": # 检查 MIME 类型
soup = BeautifulSoup(item.get_content(), 'html.parser')
full_text += soup.get_text() + "\n"

return full_text

3.按照级别分类单词并统计词频

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 根据词频和常用性划分单词级别
# 使用 nltk 自带的词库或词频信息
def categorize_words(text):
text_tokens = nltk.word_tokenize(text.lower())
lemmatized_tokens = [lemmatizer.lemmatize(word) for word in text_tokens if word.isalpha()]
word_counts = Counter(lemmatized_tokens) # 统计词频
word_levels = defaultdict(list)

for word, count in word_counts.items():
if word in nltk.corpus.words.words():
word_levels["Common"].append((word, count))
else:
word_levels["Advanced"].append((word, count))
return word_levels

可以看到上面的函数是先将文本进行单词的切割,再利用nltk库将单词分为Common和Advanced两类,并统计单词在文本中出现的频率。

4.获取单词的英文解释

1
2
3
4
5
6
def get_word_definition(word_tuple):
word = word_tuple[0] # 从元组中提取单词
synsets = wordnet.synsets(word)
if synsets:
return synsets[0].definition() # 返回第一个定义
return "No definition found."

这里利用nltk.corpus库中wordnet类来进行单词的解释

5.结果

程序运行出来的结果就是这样了,分为Common和Advanced两类,英文单词(出现的频次)以及单词的英文解释。

完整代码链接

https://github.com/YUTING0907/pythonTools/blob/main/TranslateAndCounter/extract_words_translate.py


觉得不错的话,支持一根棒棒糖吧 ୧(๑•̀⌄•́๑)૭



wechat pay



alipay

Python解析英文电子书并提供词频统计和单词解释
http://yuting0907.github.io/posts/416044d.html
作者
Echo Yu
发布于
2024年12月26日
许可协议