CountVectorizer fit_transform 错误:TypeError: expected string or bytes-like object

我正在尝试对从PDF文件通过OCR处理得到的多个.txt文件进行词袋分析。我已经使用nltk清理了所有的.txt文件(将所有内容转换为小写,去除了“the”、“a”等绑定词,并进行了词干提取以确保只保留词根),然后我将这些.txt文件保存到一个CSV文件中,每个文档一行,包含文档名称的列以及每个单词的列。

  • 每行包含一个单元格用于文件名,然后是每个单元格中的“help”、“town”等词。

现在我正在尝试使用CountVectorizer和fit_transform来获得一个矩阵,显示每个变量(词)在每行(.txt文件)中出现的频率,用1和0表示。

import pandas as pdimport osfrom nltk.tokenize import word_tokenizefile_names = os.listdir(r"C:\Users\erlen\Test 2\test 3")# Create Dictionary for File Name and Textfile_name_and_text = {}for file in file_names:    with open(r"C:\Users\Test 2\test 3\\" + file, "r") as target_file:         file_name_and_text[file] = word_tokenize(target_file.read())file_data = (pd.DataFrame.from_dict(file_name_and_text, orient='index')             .reset_index().rename(index = str, columns = {'index': 'file_name', 0: 'text'}))file_data.to_csv('LIST OF TEXT.csv', encoding='utf-8', index=False)# creating the feature matrixfrom sklearn.feature_extraction.text import CountVectorizermatrix = CountVectorizer(max_features=10000, lowercase=False)X = matrix.fit_transform(file_data).toarray()#ADD A COLUMN OF 1s to represent YES (target) and NO (non-target)file_data["investment"] = 1

我尝试了多个在这里找到的解决方案,但没有一个有效。这包括将file_data转换为:str(file_data)[file_data].fillna(“”)

我也尝试了去掉toarray(),但这不是问题所在

到目前为止,这些都没有奏效,所以我有点不知道问题出在哪里。我也检查了数据,并将.txt文件限制为只有一到两个文件进行测试,以便我能查看,结果在没有单一缺失值的情况下(只有一份.txt文件时),我仍然得到相同的错误。

这是我的文件的.head部分(单词已被同义词替换):

<bound method NDFrame.head of                 file_name          text              1  ...     5456    5457   54580         test_1.txt          face  many  ...  place  tool  other

我在行“X = matrix.fit_transform(file_data).toarray()”上得到的完整错误信息是:

Traceback (most recent call last):  File "C:/Users/test file only.py", line 25, in <module>    X = matrix.fit_transform(file_data).toarray()  File "C:\Users\sklearn\feature_extraction\text.py", line 1202, in fit_transform    vocabulary, X = self._count_vocab(raw_documents,  File "C:\Users\sklearn\feature_extraction\text.py", line 1114, in _count_vocab    for feature in analyze(doc):  File "C:\Users\sklearn\feature_extraction\text.py", line 106, in _analyze    doc = tokenizer(doc)TypeError: expected string or bytes-like object

运行file_name.dtypes显示它们都是对象

  file_name    objecttext         object1            object2            object3            object              ...  5454         object5455         object5456         object5457         object5458         objectLength: 5460, dtype: object

回答:

最后,我找到了解决这个问题的方法(或者至少是一个变通方法)。我没有先将文件导入到pandas框架中,而是直接通过CountVectorizer函数导入它们:

# creating the feature matrixfrom sklearn.feature_extraction.text import CountVectorizermatrix = CountVectorizer(input = 'filename', max_features=10000, lowercase=False)feature_variables = matrix.fit_transform(file_locations).toarray()

我不确定最初的问题是什么,但希望这能帮助那些遇到类似问题的人。请注意,这个确切的代码要求文件位于您正在运行的.py文件的文件夹中。但这可以很容易地更改。

如果不是这样,我怀疑可能是由于pandas和numpy数据框架及命令之间的差异造成的。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注