我试图制作一个拼写检查器,它将在字典中读取(words.txt
),然后在文本文件(text.txt
)中读取。然后通过使用二进制搜索,它将比较2个文件,以便查看文本文件中拼写错误的单词。
我的麻烦在于将文本文件全部转换为小写,以便可以将其与已转换为小写的字典进行比较。
正则表达式就在那里,因为文本中的单词如long,
和正则表达式会取出逗号。
我收到的错误消息是:
Traceback (most recent call last):
File "C:\Users\S\Coursework\searchBinary.py", line 25, in <module>
content = re.findall("[\w']+", content)
File "C:\Users\S\AppData\Local\Programs\Python\Python36-32\lib\re.py", line 222, in findall
return _compile(pattern, flags).findall(string)
TypeError: expected string or bytes-like object
import re
def binS(lo,hi,target):
if (lo>=hi):
return False
mid = (lo+hi) // 2
piv = words[mid]
if piv==target:
return True
if piv<target:
return binS(mid+1,hi,target)
return binS(lo,mid,target)
words = [s.strip("\n").lower() for s in open("words.txt")]
words.sort() # sort the list
text = open("text.txt" , encoding="utf8")
content = text.read().split(" ")
content = [item.lower() for item in content]
content = re.findall("[\w']+", content)
for w in content:
if not binS(0,len(words),w):
print (w)
答案 0 :(得分:1)
您需要一个字符串或类似字节的对象,但是您要传递一个列表。
如果您运行print(type(content))
,您将获得
class'list'
尝试在运行正则表达式之前将文本重新组合为字符串,它应该可以正常工作。使用content = ' '.join(content)
import re
def binS(lo,hi,target):
if (lo>=hi):
return False
mid = (lo+hi) // 2
piv = words[mid]
if piv==target:
return True
if piv<target:
return binS(mid+1,hi,target)
return binS(lo,mid,target)
words = [s.strip("\n").lower() for s in open("dictionary.txt")]
words.sort() # sort the list
text = open("temp.txt" , encoding="utf8")
content = text.read().split(" ")
content = [item.lower() for item in content]
content = ' '.join(content)
content = re.findall("[\w']+", content)
for w in content:
if not binS(0,len(words),w):
print (w)
我有一个名为dictionary.txt的字典文件,我将“Hello worl my nae is Bob”放入temp.txt。
我的输出是:
世界
答案 1 :(得分:0)
错误显然是由于传递给re.findall
函数的对象类型错误,正如已经指出的那样。我想建议你可以尝试一种不同的方法:避免完全使用正则表达式,并用这样的东西替换文本中的标点符号......
for ch in '.,:;?!"·$%&/+*#@<=>-_\\`|^´~()[]{}':
text = text.replace(ch, " ")
...然后只需执行以下操作即可获得单词列表:
words = text.split()