赞
踩
质数-return导出-语句按照顺序执行-for-else
- "函数return安照语句顺序"
-
- def fIsPrime(N):
- if N<2:return False
- if N==2:return True
- if N>2:
- for i in range(2,N):
- if N%i==0:return False
- else:return True#虽然执行后面的语句,return按照顺序优先导出
-
- def fIsPrime(N):
- if N<2:return False
- if N==2:return True
- if N>2:
- for i in range(2,N):
- if N%i==0:return False
- return True#return按照顺序优先导出.所以这一句中的else是前面都没有导出True的时候再导出。位置在哪儿都行。
-
-
- def fTest():
- return False
-
- for i in range(1,10):
- if i%2==0:
- return True
- if fTest()==False:print("虽然执行后面的语句,return按照顺序优先导出")
函数包
- #以英语为例
- for x in range(ord("A"),ord("Z")+1):
- print(chr(x))
过滤掉非汉语字符
- def isChinese(ch):
- if 19968<=ord(ch)<40869:return True;
- return False
- #unicode汉字编码范围,19968-40869,即十六进制范围4E00-9FA5
- # -*- coding: utf-8 -*-
- """
- Created on Wed Jul 3 15:12:36 2019
- @author: cc
- """
- print("输入整数,大小排序,中间用空格分开")
- nums=input("请输入数据:")
- numLine=[int(n) for n in nums.split()]
- numLine.sort()
- print(numLine)
反序,用reverse
- a=int(input("请输入一个正整数:"))
- b=list(str(a))
- b.reverse() #原来,直接用b.reverse()就可以把顺序弄反过来。b的名称不变,但是内容却发生了变化。后面环环相扣。
- if int(b[0])==0: #注意==是两个。由于写了一个=号,程序没有运行出来,花费了大量时间找问题。经验教训。
- del b[0]
- list2="".join(b)
- print(list2)
- else:
- list2="".join(b)
- print(list2)
-
-
-
-
-
-
-
-
-
#注意:==是两个。由于写了一个=号,程序没有运行出来,花费了大量时间找问题。
生活中的实际情况:写完论文后,文本中有很多条参考文献,用pyhon写代码,按照每一条参考文献的第一个汉字的字母顺序,排列参考文献。
询问“文心一言”,请人工智能写一下代码。人工智能给出的参考如下:
分析:要按照每条参考文献的第一个汉字的字母顺序排列参考文献,我们可以按照以下步骤进行:
- 读取参考文献列表。
- 提取每条参考文献的第一个汉字。
- 将这些汉字转换为拼音。
- 根据拼音对参考文献进行排序。
- 输出排序后的参考文献列表。
以下是一个简单的Python代码示例,使用pypinyin
库将汉字转换为拼音,然后根据拼音排序:
- from pypinyin import lazy_pinyin
-
- # 假设参考文献是一个列表,其中每个元素都是一个字符串,代表一条参考文献
- references = [
- "文献1",
- "文献2",
- "参考3",
- "文4",
- "献5",
- "文6",
- ]
-
- # 使用pypinyin将每个参考文献的第一个汉字转换为拼音,并添加到新的列表中
- pinyin_references = [lazy_pinyin(ref)[0] for ref in references]
-
- # 根据拼音对参考文献进行排序
- sorted_references = sorted(zip(pinyin_references, references), key=lambda x: x[0])
-
- # 输出排序后的参考文献列表
- for pinyin, ref in sorted_references:
- print(ref)
注意:这个代码示例使用了lazy_pinyin
函数,它只会转换每个汉字的第一个字母为拼音,而不是整个汉字。如果你希望获取整个汉字的拼音,可以使用pypinyin
库的pinyin
函数代替。
在电脑上实际操作,如下:
- myfile=open("wenxian.txt","r",encoding="utf-8")
- data=myfile.read()
- myfile.close()
-
- ref_lines=data.splitlines()
- ref_lines=[s for s in ref_lines if s]#列表中的元素可能是空字符串(空行),你可以使用列表推导式删除这些空字符串
-
- from pypinyin import lazy_pinyin
-
- # 使用pypinyin,遍历每个参考文献ref,将其第一个汉字lazy_pinyin(ref)[0] 转换为拼音,并添加到新的列表pinYin_ref中
- pinYin_ref=[lazy_pinyin(ref)[0] for ref in ref_lines]
-
-
- sorted_references = sorted(zip(pinYin_ref, ref_lines), key=lambda x: x[0])
-
- for pinyin,ref in sorted_references:
- print(ref)
实际上,对这段代码可以继续优化。让它按照文献的不同类型来进行排列。
即可完成。
- os.chdir("E:\eng")
- subList=os.listdir(os.getcwd())#总的eng文件夹。
- print(subList)
-
- os.getcwd()
- #作用:获取当前的工作路径;
-
- os.getcwd()
-
- os.listdir(path)
- #作用:传入任意一个path路径,返回的是该路径下所有文件和目录组成的列表;
-
- os.walk(path)
- #含义 :传入任意一个path路径,深层次遍历指定路径下的所有子文件夹,返回的是一个由路径、文件夹列表、文件列表组成的元组。
-
- os.path.exists(path)
- #含义:传入一个path路径,判断指定路径下的目录是否存在。存在返回True,否则返回False;
-
- os.mkdir(path)
- #含义:传入一个path路径,创建单层(单个)文件夹;
-
- #注意:如果文件夹已经存在,就会报错。因此创建文件夹之前,需要使用os.path.exists(path)函数判断文件夹是否存在;
在运行os 得时候,在E盘新建了文件夹,命名为"test"。test文件夹里的程序,命名为"mytest.py"。
运行的时候,出现如下问题:“OSError: [WinError 123] 文件名、目录名或卷标语法不正确”。
推测,文件见命名为test,在程序运行的时候会因为同名而产生冲突。所以, 重新命名文件夹为“scoretest”。
然后运行程序:
- import os
- os.chdir("E:\scoretest")
- subList=os.listdir(os.getcwd())#总的eng文件夹
- print(subList)
这时候,就会呈现出该文件夹中的子项。
- '''
- 如果想知道函数包的用法。上cmd,
- import <函数包>
- 或者 from <函数包> import <某函数>
- help(函数包)
- dir(函数包)
- '''
- def Hanshu():
- #一维数组
-
- import numpy as np
- myrange=range(10)
- print(myrange)
- #print(type(inylist))
-
- newlist=list(myrange)
- mylist3=np.array(newlist)
- #print(mylist3)
- for i in mylist3:
- print(i)
- #print(type(newlist))
-
- myrange2=np.arange(10)
-
-
- def ZhenXian():
- #制作正弦曲线y=x^3
- import matplotlib.pyplot as plt
- import numpy as np
-
- x=np.linspace(-5,5,250)
- y=np.sin(x**3)
-
- plt.plot(x,y,'r--')
- plt.show()
-
- #ZhenXian()
-
-
-
-
- def Zhengtai():
-
- #用于绘图的模块
- import matplotlib.pyplot as plt
-
- import numpy as np
- import random
-
- #设置随机种子
- a=np.random.seed(1234)
-
- #随机产生的样本量
- N=10000
-
- #生成正态随机数
- randnorm=np.random.normal(size=N)
- #print(randnorm)
-
- bins=np.sqrt(N)
- #正态分布密度函数
- sigma=1;mu=0
- a=1/(np.sqrt(2*sigma*np.pi))
- b=np.exp(-((bins-mu)**2)/2)
- norm_dist=a*b
- print(norm_dist)
-
- x=np.sqrt(N)
- y=norm_dist
- plt.plot(x,y,'r--')
- plt.show()
- #最后这个正态图没有做出来
- #《python 可视化数据分析》李迎,第102页
-
-
- #Zhengtai()
-
-
-
- import matplotlib.pyplot as plt
- import numpy as np
- import random
-
- #等差数列。
- mylist=np.arange(2,50,3)
-
- #随机数列
- newlist=np.linspace(1,10,50)
- print(mylist)
- print(newlist)
-
-
-
-
-
-
-
-
- '''
- https://blog.csdn.net/qq_43003358/article/details/103809293
- 电影评分数据的统计分析及可视化
- 1. 数据准备(获取、读取)
- 从网上获取的电影评分数据集。包含6040个用户对3900部电影做出的1000209条评分。数据集包含3个文件,各文件说明如下:
- (1)"ratings.dat":UserID,MovieID,Rating,Timestamp
- - UserI:用户ID(1-6040)
- - MovieID:电影ID(1-3952)
- - Rating:评分(1-5) are made on a 5-star scale (whole-star ratings only)
- - Timestamp:时间戳(时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。)
- 每个用户至少有 20 个评分
- (2)"users.dat":UserID,Gender,Age,Occupation,Zip-code
- - Gender:性别"M"(男),"F"(女)
- - Age:年龄,根据如下范围标注为对应数字
- * 1: "Under 18"
- * 18: "18-24"
- * 25: "25-34"
- * 35: "35-44"
- * 45: "45-49"
- * 50: "50-55"
- * 56: "56+"
- -Occupation:职业,根据如下列表标注为对应数字
- * 0: "other" or not specified
- * 1: "academic/educator"
- * 2: "artist"
- * 3: "clerical/admin"
- * 4: "college/grad student"
- * 5: "customer service"
- * 6: "doctor/health care"
- * 7: "executive/managerial"
- * 8: "farmer"
- * 9: "homemaker"
- * 10: "K-12 student"
- * 11: "lawyer"
- * 12: "programmer"
- * 13: "retired"
- * 14: "sales/marketing"
- * 15: "scientist"
- * 16: "self-employed"
- * 17: "technician/engineer"
- * 18: "tradesman/craftsman"
- * 19: "unemployed"
- * 20: "writer"
- - Zip-code:邮编
- (3)"movies.dat" :MovieID,Title,Genres
- -Title:电影名
- - Genres :题材(包含于下面的列表中)
- * Action
- * Adventure
- * Animation
- * Children's
- * Comedy
- * Crime
- * Documentary
- * Drama
- * Fantasy
- * Film-Noir
- * Horror
- * Musical
- * Mystery
- * Romance
- * Sci-Fi
- * Thriller
- * War
- * Western
- '''
- import pandas as pd
- import numpy as np
- import matplotlib.pyplot as plt
- %matplotlib inline
-
- #读取users数据集
- unames = ['user_id', 'gender', 'age', 'occupation', 'zip']
- users = pd.read_table('users.dat', sep='::', header=None, names=unames, engine='python')
-
- #读取ratings数据集
- rnames = ['user_id', 'movie_id', 'rating', 'timestamp']
- ratings = pd.read_table('ratings.dat', sep='::', header=None, names=rnames, engine='python')
-
- #读取movies数据集
- mnames = ['movie_id', 'title', 'genres']
- movies = pd.read_table('movies.dat', sep='::', header=None, names=mnames, engine='python')
统计各个高中的高考录取数据。各个数据表格的名称不一致。列表栏目也不一致。
整理数据文件,从xls文件中提取各个高中的名称,如下代码:
-
- import os
- import openpyxl
-
- os.chdir("E:\scoretest")
- subList=os.listdir(os.getcwd())
-
- for isen in subList:
-
- #先从文件中取中学的名字。
- name=isen.split("中")
- aSen=name[0]
- bSen=aSen+"中"
-
- if bSen[-3:]=="高级中":
- school=bSen+"学"
- elif bSen[-3:]=="高中学":
- school=bSen[:-1]
- elif bSen[-3]=="第":
- school=bSen+"学"
- else:
- school=bSen
- print(school)
openpyxl处理文件需要注意,它针对的是xlsx,而不是xls。如果是xls,仅仅表面上改变一下名称为xlsx是不行的,openpyxl依然无法处理。可以选择用函数包xlrd等,或者是通过Excel或者WPS将xls文件另存为xlsx文件,这样就能够打开了。
-
- import os
- import openpyxl
-
- os.chdir("E:\scoretest")
- subList=os.listdir(os.getcwd())
-
-
- for myxlsxName in subList:
- print(myxlsxName)
- wb=openpyxl.load_workbook(filename=myxlsxName)
- mysheet=wb[wb.sheetnames[0]] #读取xlsx文件中的第一张表。
-
- column_count = mysheet.max_column #获取竖列column的数量。
- row_count=mysheet.max_row+1#获取横行column的数量。因为循环的时候是“左闭右开”,所以会加上1。
-
- headList=[]
- for col in range(1,column_count+1):
- cell_value = mysheet.cell(row=1, column=col).value
- headList.append(cell_value)
- print(headList)
即可完成。
使用openpyxl安装包,读取xlsx文件。下面是一个案例
- import openpyxl
- file1=openpyxl.load_workbook("Marvel.xlsx")#打开工作表
-
- sheet=file1["new title"]
- sheetname=file1.sheetnames# 获取“Marvel.xlsx”工作薄中名为“new title”的工作表
- print(sheetname)# sheetnames是用来获取工作薄所有工作表的名字的,如果不知道工作薄到底有几个工作表,就可以把工作表的名字都打
-
-
- A1cell=sheet['A1']
- A1value=A1cell.value# 把“new title”工作表中A1单元格赋值给A1_cell,再利用单元格value属性,就能打印出A1单元格的值
- print(A1value)
下面是另外一个案例.
- import openpyxl
- wb2=openpyxl.load_workbook(filename="积累文档-QQ音乐链接简练版.xlsx")
-
- sheetRanges=wb2[wb2.sheetnames[0]]#定位到表格第一张表
-
- myList=[]
- for row in sheetRanges.rows:#遍历每一横行
- iList=[]
- iList.append(row[0].value)#输出xlsx文件每一单元格中的值
- iList.append(row[1].value)
- myList.append(iList)
-
- newLine=[]
- for everyLine in myList:
-
- if len(everyLine[0])>=20:
-
- newStr=everyLine[0].replace(everyLine[0],"关于腾讯 ")
- newLine.append([newStr,everyLine[1]])#依据字符串长度判断,将delStr中的语句替换,使得文本更加简明清晰
- else:
- newLine.append(everyLine)
- for i in newLine:
- print(i)
-
即可完成。
又如下面例子。
-
- import os
-
- from random import choice,randrange
- from random import *
- from openpyxl import Workbook,load_workbook
-
- import sqlite3
-
- def GRD():
-
- for i in range(10):
- xlsName="xlsxs"+str(i)+".xlsx"
- totalLines=randrange(100)
- wb=Workbook()
- ws=wb.worksheets[0]
-
- ws.append(["a","b","c","d","e"])
-
-
- for j in range(totalLines):
- line=[chr(randint(50,70)) for x in range(5) ]
- ws.append(line)
-
- wb.save(xlsName)
- GRD()
- print(os.getcwd())
- os.chdir("E:\社团")
- print(os.listdir(os.getcwd()))
-
- xlsxs=("xlsxs"+ fn for fn in os.listdir("."))
- with sqlite3.connect("dataxlsx.db") as conn:
- cur=conn.cursor()
- for xlsx in xlsxs:
- sql="INSERT INFO fromxlsx VALUE(?,?,?,?,?)"
- cur.executemany(sql,eachXlsx(xlsx))
- conn.commit()
即可完成。
完整代码如下:
-
- import os
- import openpyxl
-
- wblast=openpyxl.Workbook()
- wslast=wblast.active
- rowHead=["姓名","性别","民族","就读学校","文理/理科","高考成绩","录取院校","录取专业"]
- wslast.append(rowHead)
-
-
- os.chdir("E:\scoretest")
- subList=os.listdir(os.getcwd())
-
- n=2 #在总的汇集表格中列出其名,n=1的时候是标题栏。n>=2是正文。
- for myxlsxName in subList:
-
- #先从文件中取中学的名字。
- name=myxlsxName.split("中")
- aSen=name[0]
- bSen=aSen+"中"
-
- if bSen[-3:]=="高级中":
- school=bSen+"学"
- elif bSen[-3:]=="高中学":
- school=bSen[:-1]
- elif bSen[-3]=="第":
- school=bSen+"学"
- else:
- school=bSen
- print(school)
-
-
-
-
- wb=openpyxl.load_workbook(filename=myxlsxName)
- mysheet=wb[wb.sheetnames[0]] #读取xlsx文件中的第一张表。
-
- column_count = mysheet.max_column #获取竖列column的数量。
- row_count=mysheet.max_row+1#获取横行column的数量。因为循环的时候是“左闭右开”,所以会加上1。
-
- headList=[]
- for col in range(1,column_count+1):
- cell_value = mysheet.cell(row=1, column=col).value
- headList.append(cell_value)
-
- nameCol=headList.index("姓名")+1
-
- if "录取院校" in headList:
- universityIndex=headList.index("录取院校")#用于将不规则的字头题目转化为统一的文本形式
- headList[universityIndex]="录取学校"
- elif "录取大学" in headList:
- universityIndex=headList.index("录取大学")
- headList[universityIndex]="录取学校"
- else:pass
- universityCol=headList.index("录取学校")+1
-
-
- if "文科/理科" in headList:
- wenliIndex=headList.index("文科/理科")
- headList[wenliIndex]=("文理科")
- elif "科类" in headList:
- wenliIndex=headList.index("科类")
- headList[wenliIndex]="文理科"
- else:pass
-
- if "文理科" in headList:
- wenlikeCol=headList.index("文理科")+1
- else:wenlikeCol=10
-
-
- if "高考分数" in headList:
- fenshuIndex=headList.index("高考分数")
- headList[fenshuIndex]="高考成绩"
- else:pass
- if "高考成绩" in headList: fenshuCol=headList.index("高考成绩")+1
- else:fenshuCol=10
-
-
- if "民族" in headList:minzuCol=headList.index("民族")+1
- else:minzuCol=10
-
-
- if "性别" in headList:xingbieCol=headList.index("性别")+1
- else:xingbieCol=10
-
- if "专业" in headList:majorCol=headList.index("专业")+1
- else:majorCol=10
-
-
-
-
- for row in range(2,mysheet.max_row+1):
- name_cell_value=mysheet.cell(row=row,column=nameCol).value
- university_cell_value=mysheet.cell(row=row,column=universityCol).value
- wenlike_cell_value=mysheet.cell(row=row,column=wenlikeCol).value
- fenshu_cell_value=mysheet.cell(row=row,column=fenshuCol).value
- minzu_cell_value=mysheet.cell(row=row,column=minzuCol).value
- xingbie_cell_value=mysheet.cell(row=row,column=xingbieCol).value
- fenshu_cell_value=mysheet.cell(row=row,column=fenshuCol).value
- major_cell_value=mysheet.cell(row=row,column=majorCol).value
-
- wslast.cell(n,1,name_cell_value)
- wslast.cell(n,2,xingbie_cell_value)
- wslast.cell(n,3,minzu_cell_value)
- wslast.cell(n,4,school)
- wslast.cell(n,5,wenlike_cell_value)
- wslast.cell(n,6,fenshu_cell_value)
- wslast.cell(n,7,university_cell_value)
- wslast.cell(n,8,major_cell_value)
- n+=1
-
-
-
-
-
- wblast.save("E:\scoreCa.xlsx")
-
-
-
-
在处理完毕高考成绩后,现在需要比较两张表格的异同。则用如下代码:
-
- import os
- import openpyxl
- from openpyxl import Workbook
-
- wblost=Workbook()
- wslost=wblost.active
-
-
- wb2=openpyxl.load_workbook(filename="scoreCa.xlsx")#这张表上的人名有些遗失
- mysheet2=wb2[wb2.sheetnames[0]] #读取xlsx文件中的第一张表。
-
- column_count2 = mysheet2.max_column #获取竖列column的数量。
- row_count2=mysheet2.max_row+1#获取横行column的数量。因为循环的时候是“左闭右开”,所以会加上1。
-
- nameList2=[]
- for row in range(1,row_count2+1):
- cell_value = mysheet2.cell(row=row, column=1).value
- name2=cell_value
-
- nameList2.append(name2)
-
-
- wb1=openpyxl.load_workbook(filename="allinfo.xlsx")#这张表中的人名比较全。
- mysheet=wb1[wb1.sheetnames[0]] #读取xlsx文件中的第一张表。
-
- column_count = mysheet.max_column #获取竖列column的数量。
- row_count=mysheet.max_row+1#获取横行column的数量。因为循环的时候是“左闭右开”,所以会加上1。
-
- n=1#是指的工作表中第一个横行
- for row in range(1,row_count+1):
- cell_value = mysheet.cell(row=row, column=1).value
- name=cell_value
- iList=[]
- if name not in nameList2:
-
- for column in range(1,column_count+1):
- ivalue=mysheet.cell(row=row,column=column).value
- iList.append(ivalue)
- for i,item in enumerate(iList):#将列表中的字符串,输入到工作表中的每一行中。
- wslost.cell(n,i+1,item)
-
- n+=1
-
- wblost.save("lost.xlsx")
即可完成。
以下这段代码可以识别英文命名的图片,而不能识别中文命名的图片。如何解决呢?
- import pandas as pd
- import cv2
- import pytesseract
-
- import os
- os.chdir("E:\scoretest")
- subList=os.listdir(os.getcwd())
-
- for scoreName in subList:
-
- # 读取PNG图片
-
- image = cv2.imread(scoreName)
-
- # 使用Tesseract OCR库识别图片中的文字
- text = pytesseract.image_to_string(image, lang='chi_sim')
-
- # 将识别的文字转换为DataFrame
- rows = text.split('\n')
- data = []
- for row in rows:
- if row.strip() == '':
- continue
- data.append(row.split('\t'))
- df = pd.DataFrame(data)
-
- # 将DataFrame保存为Excel
- df.to_excel(f'{scoreName}.xlsx', index=False)
-
cv2.imread("scoreName")方法读取图像,发现imread无法读取中文文件和中文目录,只能识别英文文件和英文目录。
为了解决中文文件目录的问题,可以尝试如下操作:
- #要让cv2识别中文命名的文件,可以使用Python的os模块来对文件路径进行编码转换。下面是一段示例代码:
-
-
- import cv2
- import os
-
- def imread_cn(file_path):
- # 获取文件的目录和文件名
- directory, filename = os.path.split(file_path)
-
- # 将目录进行编码转换
- directory = directory.encode('utf-8')
-
- # 将目录和文件名拼接为完整的路径
- file_path = os.path.join(directory, filename)
-
- # 使用cv2.imread()方法读取图像
- image = cv2.imread(file_path)
-
- return image
-
- # 示例用法
- image_path = '中文文件名.jpg'
- image = imread_cn(image_path)
-
在上述代码中,我们首先使用os.path.split()方法获取文件的目录和文件名。然后,将目录进行编码转换,使用encode('utf-8')方法将目录转换为字节字符串。最后,将目录和文件名拼接为完整的路径,并使用cv2.imread()方法读取图像。
将image_path变量替换为中文命名文件的路径,然后运行代码即可。
但是,这样尝试后,发现改动的只是文件夹的名称,对于用中文命名的图片,无济于事。
cv2.imdecode()
进一步思考原因:cv2.imread
读到带中文路径图片,会报错。解决方法:先用np.fromfile()
读取为np.uint8格式,再使用cv2.imdecode()
解码。代码如下:
- import pandas as pd
- import cv2
- import pytesseract
- import os
- import numpy as np
-
- os.chdir("E:\scoretest")
- subList=os.listdir(os.getcwd())#总的eng文件夹
-
- for scoreName in subList:
- image = cv2.imdecode(np.fromfile(scoreName, dtype=np.uint8), cv2.IMREAD_COLOR)
- # imdecode读取的是rgb,如果后续需要opencv处理的话,需要转换成bgr,转换后图片颜色会变化
- image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
-
- # 使用Tesseract OCR库识别图片中的文字
- text = pytesseract.image_to_string(image, lang='chi_sim')
-
- # 将识别的文字转换为DataFrame
- rows = text.split('\n')
- data = []
- for row in rows:
- if row.strip() == '':
- continue
- data.append(row.split('\t'))
- df = pd.DataFrame(data)
-
- # 将DataFrame保存为Excel
- df.to_excel(f'{scoreName}.xlsx', index=False)
"E:\scoretest"文件中是jpg和png格式的图片,由上面程序,通过Console平台,可以将图片数据转化为excel数据。
运行代码后,发现大多数图片能够得到处理,但是有几幅图片,红底白字,可能无法识别。所以,需要进一步优化代码。
笔者思考:推测可能是因为字体和图片颜色的问题。cv2读取彩色图片通道顺序为B、G、R,PIL显示图片是R、G、B顺序,因此读出来图片颜色会改变,需要对图像通道进行调序。
询问BingChat,ChatGPT思考后给出几个可能原因:
要进一步优化代码以解决红底白字图片无法识别的问题,可以尝试以下方法:
调整图像预处理步骤:在将图像从RGB转换为BGR之前,尝试对图像进行一些预处理操作,例如二值化、灰度化、调整亮度和对比度等。这样可以尝试改变图像的颜色和对比度,以提高文字识别的准确性。
调整Tesseract OCR的参数:可以尝试调整OCR的参数,例如语言设置、扫描方向、字符集等。可以查阅Tesseract OCR的文档以了解更多可用的参数选项,并根据具体情况进行调整。
使用其他OCR库:除了Tesseract OCR,还有其他OCR库可供选择,例如百度OCR、阿里云OCR等。可以尝试使用其他OCR库来进行文字识别,并比较识别结果的准确性。
手动处理无法识别的图片:对于无法通过自动识别的图片,可以手动进行处理。例如,使用图像处理软件对图片进行调整、增强或修改,以提高文字的可读性。然后再使用代码进行文字识别。
优化代码的具体方法和步骤可能因具体情况而异,可以根据实际情况和需求进行尝试和调整。
基于ChatGpt的建议,选择寻找其它图像处理软件。下面是一个很好的网站平台:
诚华OCR - 图片转文字 - 免费在线OCR (109876543210.com)
诚华 OCR 图片 →文件,https://zhcn.109876543210.com/。这个网站平台可以说是上面笔者博客所写代码的“完全加强版”。两者的原理应该一致。当然,软件平台生成后,就可以商业化运营。这是软件市场的常规现象。
登录平台后, 将图片数据转化为表格xlsx数据。
然后,对于自己所编写代码、网站平台都未能清晰识别的图片,则选择用飞书、微信、QQ等的“识别”功能,按照每一列来截取识别。这些APP识别的准确率通常比较高。通常即为截图快捷键。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。