TextData = pd.read_excel('train.xlsx', header=None, usecols=[1]) TextData.columns = ['label'] TextData['texts'] = pd.read_excel('train.xlsx', header=None, usecols=[0]) # 读入测试数据 TextDataTest = pd.read_excel('test.xlsx', header=None, usecols=[1]) TextDataTest.columns = ['label'] TextDataTest['texts'] = pd.read_excel('test.xlsx', header=None, usecols=[0]) # 设置计数器,用jieba.cut对句子进行分词,并用Vocab构建词表 counter = Counter() for (label, texts) in TextData.values: counter.update(jieba.cut(texts)) min_freq = 1 # 设置最小频次 vocab = Vocab(counter, min_freq=min_freq) print(vocab['我'])出现Vocab.__init__() got an unexpected keyword argument 'min_freq'错误怎么改
时间: 2024-01-28 18:04:04 浏览: 29
这个错误可能是因为你使用的`torchtext`版本不支持`min_freq`参数。在早期版本的`torchtext`中,确实没有`min_freq`参数,需要使用其他方式来设置最小频次。
一种可行的解决方案是在构建`counter`对象时,将频率小于`min_freq`的词语忽略掉,如下所示:
```
from collections import Counter
import jieba
from torchtext.vocab import Vocab
TextData = pd.read_excel('train.xlsx', header=None, usecols=[1])
TextData.columns = ['label']
TextData['texts'] = pd.read_excel('train.xlsx', header=None, usecols=[0])
# 设置计数器,用jieba.cut对句子进行分词,并用Vocab构建词表
min_freq = 1 # 设置最小频次
counter = Counter(word for (label, texts) in TextData.values for word in jieba.cut(texts) if counter[word] >= min_freq)
vocab = Vocab(counter)
print(vocab['我'])
```
请尝试使用这个代码片段来解决你的问题。
相关问题
class InventoryApp: def init(self, master): self.master = master master.title("物料进出库统计") # 创建标签和文本框 self.label1 = tk.Label(master, text="物料名称:") self.label1.grid(row=0, column=0, padx=5, pady=5) self.material_name = tk.Entry(master) self.material_name.grid(row=0, column=1, padx=5, pady=5) self.label2 = tk.Label(master, text="数量:") self.label2.grid(row=1, column=0, padx=5, pady=5) self.material_qty = tk.Entry(master) self.material_qty.grid(row=1, column=1, padx=5, pady=5) # 创建进出库按钮 self.in_button = tk.Button(master, text="进库", command=self.in_stock) self.in_button.grid(row=2, column=0, padx=5, pady=5) self.out_button = tk.Button(master, text="出库", command=self.out_stock) self.out_button.grid(row=2, column=1, padx=5, pady=5) # 添加显示excel内容的按钮 self.show_button = tk.Button(master, text="显示Excel内容", command=self.show_excel) self.show_button.grid(row=3, column=0, padx=5, pady=5) # 打开Excel文件 self.wb = openpyxl.load_workbook(r"C:\Users\bing3_chen\Desktop\1.xlsx") self.record_sheet = self.wb["記錄"] self.data_sheet = self.wb["數據"] # 显示excel内容的回调函数 def show_excel(self): # 创建一个新窗口 top = tk.Toplevel(self.master) # 创建表格用于显示第一个工作表 columns1 = [col[0] for col in self.record_sheet.iter_cols()] treeview1 = ttk.Treeview(top, columns=columns1, show="headings") treeview1.grid(row=0, column=0, padx=5, pady=5) # 设置表格列的标题和宽度 for col in columns1: treeview1.heading(col, text=col) treeview1.column(col, width=100, anchor="center") # 显示第一个工作表的内容 for row in self.record_sheet.iter_rows(values_only=True): treeview1.insert("", tk.END, values=row) # 创建表格用于显示第二个工作表 columns2 = [col[0] for col in self.data_sheet.iter_cols()] treeview2 = ttk.Treeview(top, columns=columns2, show="headings") treeview2.grid(row=1, column=0, padx=5, pady=5) # 设置表格列的标题和宽度 for col in columns2: treeview2.heading(col, text=col) treeview2.column(col, width=100, anchor="center") # 显示第二个工作表的内容 for row in self.data_sheet.iter_rows(values_only=True): treeview2.insert("", tk.END, values=row)修改這個代碼不打開新的窗口,就在原本窗口的右側顯示,并且兩個文本框大小一致,
你可以尝试以下修改代码:
1. 首先,需要在主窗口中添加一个容器,用于放置表格和文本框。
2. 然后,将显示excel内容的按钮的回调函数修改为在容器中创建表格,而不是打开新窗口。
3. 最后,将两个文本框的大小设置为一致。
修改后的代码如下:
```
class InventoryApp:
def __init__(self, master):
self.master = master
master.title("物料进出库统计")
# 创建容器,用于放置表格和文本框
self.container = tk.Frame(master)
self.container.grid(row=0, column=0, padx=5, pady=5)
# 创建标签和文本框
self.label1 = tk.Label(self.container, text="物料名称:")
self.label1.grid(row=0, column=0, padx=5, pady=5)
self.material_name = tk.Entry(self.container, width=20)
self.material_name.grid(row=0, column=1, padx=5, pady=5)
self.label2 = tk.Label(self.container, text="数量:")
self.label2.grid(row=1, column=0, padx=5, pady=5)
self.material_qty = tk.Entry(self.container, width=20)
self.material_qty.grid(row=1, column=1, padx=5, pady=5)
# 创建进出库按钮
self.in_button = tk.Button(self.container, text="进库", command=self.in_stock)
self.in_button.grid(row=2, column=0, padx=5, pady=5)
self.out_button = tk.Button(self.container, text="出库", command=self.out_stock)
self.out_button.grid(row=2, column=1, padx=5, pady=5)
# 添加显示excel内容的按钮
self.show_button = tk.Button(self.container, text="显示Excel内容", command=self.show_excel)
self.show_button.grid(row=3, column=0, columnspan=2, padx=5, pady=5)
# 打开Excel文件
self.wb = openpyxl.load_workbook(r"C:\Users\bing3_chen\Desktop\1.xlsx")
self.record_sheet = self.wb["記錄"]
self.data_sheet = self.wb["數據"]
# 显示excel内容的回调函数
def show_excel(self):
# 创建表格用于显示第一个工作表
columns1 = [col[0] for col in self.record_sheet.iter_cols()]
treeview1 = ttk.Treeview(self.container, columns=columns1, show="headings")
treeview1.grid(row=0, column=2, rowspan=2, padx=5, pady=5, sticky="nsew")
# 设置表格列的标题和宽度
for col in columns1:
treeview1.heading(col, text=col)
treeview1.column(col, width=100, anchor="center")
# 显示第一个工作表的内容
for row in self.record_sheet.iter_rows(values_only=True):
treeview1.insert("", tk.END, values=row)
# 创建表格用于显示第二个工作表
columns2 = [col[0] for col in self.data_sheet.iter_cols()]
treeview2 = ttk.Treeview(self.container, columns=columns2, show="headings")
treeview2.grid(row=2, column=2, padx=5, pady=5, sticky="nsew")
# 设置表格列的标题和宽度
for col in columns2:
treeview2.heading(col, text=col)
treeview2.column(col, width=100, anchor="center")
# 显示第二个工作表的内容
for row in self.data_sheet.iter_rows(values_only=True):
treeview2.insert("", tk.END, values=row)
# 设置文本框大小一致
self.material_name.config(width=20)
self.material_qty.config(width=20)
```
text += page.extract_text() TypeError: can only concatenate str (not "NoneType") to str 这个错误怎么办
这个错误通常是由于`pdfplumber`无法成功提取某一页的文本内容而导致的。为了避免这个错误,您可以在提取文本之前进行一些检查。
以下是一种修改后的代码示例,可以处理这个问题:
```python
import os
import pdfplumber
import pandas as pd
# 指定要读取的文件夹和要写入的Excel文件路径
folder_path = 'path/to/folder'
excel_file = 'path/to/output/excel.xlsx'
# 创建一个空的DataFrame来存储数据
data = pd.DataFrame(columns=['文件名', '内容'])
# 遍历文件夹中的所有PDF文件
for filename in os.listdir(folder_path):
if filename.endswith('.pdf'):
pdf_path = os.path.join(folder_path, filename)
# 使用pdfplumber打开PDF文件
with pdfplumber.open(pdf_path) as pdf:
# 提取PDF内容
text = ""
for page in pdf.pages:
extracted_text = page.extract_text()
if extracted_text:
text += extracted_text
# 将文件名和内容添加到DataFrame中
data = data.append({'文件名': filename, '内容': text}, ignore_index=True)
# 将DataFrame写入Excel文件
data.to_excel(excel_file, index=False)
```
在修改后的代码中,我们在提取文本之前使用了一个条件语句 `if extracted_text:` 来检查提取的文本是否为空。只有当提取的文本不为空时,才将其拼接到`text`变量中。
这样做可以避免将`None`类型的对象与字符串进行拼接,进而避免引发`TypeError`错误。
如果您仍然遇到问题,请确保您使用的是最新版本的`pdfplumber`库,并检查PDF文件是否可读取和包含了可提取的文本内容。
希望这可以帮助到您!如果您有任何其他问题,请随时提问。