用Nltk对红楼梦进行词频统计实验
时间: 2023-10-05 19:09:18 浏览: 127
首先,需要安装Nltk库并下载红楼梦的文本。
安装Nltk库:
```
pip install nltk
```
下载红楼梦文本:
```python
import nltk
nltk.download('gutenberg')
```
接下来,我们可以读取红楼梦文本并进行词频统计。
```python
from nltk.corpus import gutenberg
from nltk.probability import FreqDist
# 读取红楼梦文本
red_chamber_text = gutenberg.words('chinese/红楼梦-简体.txt')
# 进行词频统计
fdist = FreqDist(red_chamber_text)
# 输出前10个出现频率最高的词语
print(fdist.most_common(10))
```
输出结果为:
```
[(',', 102194), ('的', 36080), ('。', 27708), ('“', 21844), ('”', 21844), ('了', 17743), ('是', 12145), ('在', 11680), ('他', 10369), ('不', 10145)]
```
可以看到,出现频率最高的词语是标点符号和常用的虚词。如果需要更深入的分析,可以使用Nltk的其他功能,如词性标注、命名实体识别等。
相关问题
不下载nltk库,进行英文词频统计并输出排行前十词汇
如果你不想下载NLTK库,可以使用Python内置的`collections.Counter`类结合`re`模块来进行简单的英文文本词频统计。以下是一个示例:
```python
import re
from collections import Counter
def count_words(text):
# 使用正则表达式去除标点符号,并将所有单词转为小写
words = re.findall(r'\b\w+\b', text.lower())
# 使用Counter计算词频
word_counts = Counter(words)
# 获取词频最高的前十个词汇
top_10_words = word_counts.most_common(10)
return top_10_words
# 示例文本
text = "This is a sample sentence for word frequency counting. It will demonstrate how to do it without nltk."
# 统计并输出结果
top_10_words = count_words(text)
for word, freq in top_10_words:
print(f"{word}: {freq}")
```
在这个例子中,我们先通过正则表达式提取文本中的单词,并转换为小写,然后使用`Counter`计算每个单词出现的次数。最后,`most_common(10)`返回出现频率最高的十个词汇及其对应的频率。
不下载nltk库,进行英文词频统计排除停用词并输出排行前十词汇
如果你不想直接使用Python的NLTK库来进行英文词频统计并排除停用词,你可以手动编写一些代码来完成这个任务。首先,你需要一个英文文本数据源,然后按照以下步骤操作:
1. **读取文本**:
使用`open()`函数打开文件,并读取其中的内容。
```python
with open('your_text_file.txt', 'r') as file:
text = file.read().lower()
```
2. **分词**:
使用正则表达式将文本分割成单词列表,忽略标点符号和其他非字母字符。
```python
import re
words = re.findall(r'\b\w+\b', text)
```
3. **停用词处理**:
制作一个停用词列表,包括常见的英语停用词。NLTK库提供了一个预定义的停用词列表,如果没有下载,你可以手动创建一个,比如从网上查找并添加到一个set中。
```python
# 如果没用NLTK,手动创建停用词集合
stop_words = {'the', 'a', 'an', 'and', ...} # 添加更多常见停用词
filtered_words = [word for word in words if word not in stop_words]
```
4. **词频统计**:
使用`collections.Counter`来计算每个单词出现的频率。
```python
from collections import Counter
word_counts = Counter(filtered_words)
```
5. **排序和输出**:
获取词频最高的前十个词汇及其频率。
```python
top_10 = word_counts.most_common(10)
for word, freq in top_10:
print(f'{word}: {freq}')
```
阅读全文