corpus =list(words.tolist()) ^^^^^^^^^^^^ AttributeError: 'generator' object has no attribute 'tolist'
时间: 2023-11-13 18:43:06 浏览: 129
这个错误是因为你尝试对一个生成器对象调用 `tolist()` 方法,而生成器对象没有 `tolist()` 方法。`tolist()` 方法通常是用于将数组或矩阵转换为列表的方法。
要解决这个问题,你可以考虑将生成器对象转换为列表对象,然后再调用 `tolist()` 方法。你可以使用 `list()` 函数将生成器对象转换为列表对象,然后再调用 `tolist()` 方法。
下面是一个示例代码:
```python
corpus = list(words)
corpus = np.array(corpus)
corpus = corpus.tolist()
```
在这个示例中,我们首先将生成器对象 `words` 转换为列表对象 `corpus`,然后将列表对象转换为 NumPy 数组 `corpus`,最后使用 `tolist()` 方法将数组转换回列表。请根据你的具体情况进行适当的修改。
相关问题
import jieba def word_extract(): # 读取文件 corpus = [] path = 'D:/自然语言处理/第2章/data/金庸-白马啸西风.txt' content = '' for line in open(path, 'r', encoding='gbk', errors='ignore'): line = line.strip() content += line corpus.append(content) # 加载停用词 stop_words = [] path = 'D:/自然语言处理/第4章/data/stopword.txt' for line in open(path, encoding='utf8'): line = line.strip() stop_words.append(line) # jieba分词 split_words = [] word_list = jieba.cut(corpus[0]) for word in word_list: if word not in stop_words: split_words.append(word)这段代码哪里有问题
这段代码的缩进有问题,导致程序运行时会报错。具体来说,for循环和if语句的缩进应该向右移动一个制表符或四个空格,如下所示:
```
import jieba
def word_extract():
# 读取文件
corpus = []
path = 'D:/自然语言处理/第2章/data/金庸-白马啸西风.txt'
content = ''
for line in open(path, 'r', encoding='gbk', errors='ignore'):
line = line.strip()
content += line
corpus.append(content)
# 加载停用词
stop_words = []
path = 'D:/自然语言处理/第4章/data/stopword.txt'
for line in open(path, encoding='utf8'):
line = line.strip()
stop_words.append(line)
# jieba分词
split_words = []
word_list = jieba.cut(corpus[0])
for word in word_list:
if word not in stop_words:
split_words.append(word)
return split_words
```
import jieba from sklearn.feature_extraction.text import TfidfVectorizer import numpy as np import pandas as pd # 读取停用词文件 def read_stopwords(file_path): with open(file_path, 'r', encoding='gbk') as f: stopwords = [line.strip() for line in f] return set(stopwords) # 中文分词 def chinese_word_cut(text, stopwords): words = jieba.cut(text) result = [] for word in words: if word not in stopwords: result.append(word) return " ".join(result) # 读取CSV文件 weibo_data = pd.read_csv('E:\Python自然语言处理\data\weibo_Convid19.csv', sep='\t') df = weibo_data['text_raw'] # 获取停用词集合 stopwords = read_stopwords('E:\Python自然语言处理\data\stopword.txt') # 对每条微博进行分词和去停用词 corpus_list = df.apply(lambda x: chinese_word_cut(x, stopwords)) # 提取关键词 corpus = ' '.join(corpus_list) tfidf = TfidfVectorizer() tf_key = tfidf.fit_transform([corpus]) word = tfidf.get_feature_names() weight = tf_key.toarray()[0] w_sort = np.argsort(-weight) print('Top 20 keywords:') for i in range(20): print(word[w_sort[i]])结果含有表情包,怎么去除
可以使用正则表达式来去除文本中的表情包,例如:
```
import re
def remove_emoji(text):
emoji_pattern = re.compile("["
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols & pictographs
u"\U0001F680-\U0001F6FF" # transport & map symbols
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
"]+", flags=re.UNICODE)
return emoji_pattern.sub(r'', text)
# 在 chinese_word_cut 函数中调用 remove_emoji 函数
def chinese_word_cut(text, stopwords):
text = remove_emoji(text)
words = jieba.cut(text)
result = []
for word in words:
if word not in stopwords:
result.append(word)
return " ".join(result)
```
这样就可以在分词前去除文本中的表情包。
阅读全文