用Python语言给给语句中的词性进行分类,分出名词和形容词
时间: 2024-03-15 08:46:23 浏览: 14
可以使用Python中的自然语言处理工具NLTK来进行词性分类。具体实现如下:
```python
import nltk
sentence = "This is a beautiful day."
tokens = nltk.word_tokenize(sentence)
tags = nltk.pos_tag(tokens)
nouns = []
adjectives = []
for tag in tags:
if tag[1] == 'NN' or tag[1] == 'NNS' or tag[1] == 'NNP' or tag[1] == 'NNPS':
nouns.append(tag[0])
elif tag[1] == 'JJ' or tag[1] == 'JJR' or tag[1] == 'JJS':
adjectives.append(tag[0])
print("Nouns:", nouns)
print("Adjectives:", adjectives)
```
输出结果为:
```
Nouns: ['day']
Adjectives: ['beautiful']
```
其中,`nltk.word_tokenize()`函数用于将句子分词,`nltk.pos_tag()`函数用于对分词后的单词进行词性标注。根据标注结果,将名词和形容词分别存入相应的列表中。
相关问题
用python jieba对文章中名词 动词 形容词 进行词频统计并绘制词云图
好的,首先需要安装jieba和wordcloud模块,可以通过以下命令安装:
```
pip install jieba
pip install wordcloud
```
接下来,我们假设文章内容已经存储在一个txt文件中,代码如下:
```python
import jieba
from collections import Counter
from wordcloud import WordCloud
import matplotlib.pyplot as plt
with open('article.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 使用jieba进行分词
words = jieba.cut(content)
# 定义需要统计的词性
word_type = ['n', 'v', 'a']
# 过滤出指定词性的词语
filtered_words = [word for word in words if len(word) >= 2 and word.strip() and word.startswith(tuple(word_type))]
# 统计词频
word_count = Counter(filtered_words)
# 绘制词云图
wc = WordCloud(font_path='simhei.ttf', background_color='white', max_words=200, width=1200, height=800)
wc.generate_from_frequencies(word_count)
plt.imshow(wc)
plt.axis('off')
plt.show()
```
在上述代码中,我们使用jieba进行中文分词,并通过传入一个包含需要统计的词性的列表来过滤出名词、动词和形容词。然后使用Counter类来统计每个词语的出现频率。最后通过wordcloud模块来绘制词云图。
需要注意的是,我们在绘制词云图时,需要指定字体文件的路径,否则可能会出现乱码。在本例中,我们使用了宋体字体的一个变体simhei.ttf。
运行完上述代码后,就可以得到一个词云图,它会显示文章中出现频率较高的词语,可以帮助我们更好地了解文章的主题和关键词。
如何用python对一篇给出的中文文章中的名词、动词和形容词做词频统计并绘制词云图。
要实现这个任务,我们需要使用到以下几个 Python 库:
- jieba:中文分词库
- wordcloud:词云图生成库
- matplotlib:数据可视化库
首先,我们需要安装以上三个库,可以使用以下命令:
```
pip install jieba wordcloud matplotlib
```
安装完成后,我们可以开始编写代码。
```python
import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud
# 读取文章内容
with open('article.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 对文章进行分词
words = jieba.cut(content)
# 定义词频统计字典
freq_dict = {}
# 遍历分词结果,统计词频
for word in words:
if len(word) < 2:
continue
if word in freq_dict:
freq_dict[word] += 1
else:
freq_dict[word] = 1
# 提取名词、动词和形容词
nouns = []
verbs = []
adjs = []
for word, freq in freq_dict.items():
pos = jieba.lcut(word, HMM=False)[0]
if pos == 'n':
nouns.append((word, freq))
elif pos == 'v':
verbs.append((word, freq))
elif pos == 'a':
adjs.append((word, freq))
# 绘制名词词云图
noun_wc = WordCloud(font_path='msyh.ttc', width=800, height=600, background_color='white')
noun_wc.generate_from_frequencies(dict(nouns))
plt.imshow(noun_wc, interpolation='bilinear')
plt.axis('off')
plt.show()
# 绘制动词词云图
verb_wc = WordCloud(font_path='msyh.ttc', width=800, height=600, background_color='white')
verb_wc.generate_from_frequencies(dict(verbs))
plt.imshow(verb_wc, interpolation='bilinear')
plt.axis('off')
plt.show()
# 绘制形容词词云图
adj_wc = WordCloud(font_path='msyh.ttc', width=800, height=600, background_color='white')
adj_wc.generate_from_frequencies(dict(adjs))
plt.imshow(adj_wc, interpolation='bilinear')
plt.axis('off')
plt.show()
```
以上代码中,我们首先使用 `jieba` 库将文章进行分词,然后统计分词结果中名词、动词和形容词的词频,并分别绘制词云图。
需要注意的是,我们在分词时使用了 `jieba.lcut(word, HMM=False)[0]` 来提取词性,其中 `HMM=False` 表示关闭隐马尔可夫模型,这样可以提高分词的准确率。此外,我们还过滤了单个字和长度小于 2 的词,这些词往往没有实际意义,不应计入词频统计中。
最后,我们使用 `plt.imshow()` 和 `plt.show()` 函数来显示词云图。在显示词云图时,需要设置 `interpolation='bilinear'` 参数来改善图像质量。