Python 使用线性搜索的拼写检查器
Python Spell Checker Using Linear Search
我正在尝试使用线性搜索编写拼写检查器,该搜索器采用莎士比亚的全部作品并将其与 10,000 个单词的词典进行比较。我希望代码输出莎士比亚全集中不在字典中的所有单词。我附上了我当前输出的图片以及我正在寻找的输出图片。我目前拥有的代码不会产生任何错误,但是从当前输出中可以看出,它显示了莎士比亚全集中的所有单词。在此感谢任何帮助。
https://imgur.com/a/Gcmpy:当前输出
https://imgur.com/a/nLWJ8:我正在寻找的输出
import re
import time
start_time = time.time()
def LinearSearch(Target, Words):
#Linear search for target in words. Words need not be sorted.
for s in Words:
if s==Target:
return True
return False
# Gets the Dictionary.
Words = [s.strip("\n").lower() for s in open("10kWords.txt")]
# Gets ShakespearesFullWorks and Encodes it.
Input_File = open('ShakespeareFullWorks.txt', "r", encoding='utf-8')
lines = Input_File.readlines()
for x in lines:
if not LinearSearch(x, Words):
print (re.findall(r"[\w']+", x))
print ("--- %s seconds ---" % (time.time() - start_time))
问题是 LinearSearch(x, Words)
中的 x
不是单词而是一行。所以每一行都被打印出来,因为一行可能与一个词不匹配。你需要做的:
for line in lines:
for word in re.findall(r"[\w']+", line):
if not LinearSearch(word, Words):
print(word)
假设 re.findall(r"[\w']+", x)
returns x
中的单词列表。
我正在尝试使用线性搜索编写拼写检查器,该搜索器采用莎士比亚的全部作品并将其与 10,000 个单词的词典进行比较。我希望代码输出莎士比亚全集中不在字典中的所有单词。我附上了我当前输出的图片以及我正在寻找的输出图片。我目前拥有的代码不会产生任何错误,但是从当前输出中可以看出,它显示了莎士比亚全集中的所有单词。在此感谢任何帮助。
https://imgur.com/a/Gcmpy:当前输出
https://imgur.com/a/nLWJ8:我正在寻找的输出
import re
import time
start_time = time.time()
def LinearSearch(Target, Words):
#Linear search for target in words. Words need not be sorted.
for s in Words:
if s==Target:
return True
return False
# Gets the Dictionary.
Words = [s.strip("\n").lower() for s in open("10kWords.txt")]
# Gets ShakespearesFullWorks and Encodes it.
Input_File = open('ShakespeareFullWorks.txt', "r", encoding='utf-8')
lines = Input_File.readlines()
for x in lines:
if not LinearSearch(x, Words):
print (re.findall(r"[\w']+", x))
print ("--- %s seconds ---" % (time.time() - start_time))
问题是 LinearSearch(x, Words)
中的 x
不是单词而是一行。所以每一行都被打印出来,因为一行可能与一个词不匹配。你需要做的:
for line in lines:
for word in re.findall(r"[\w']+", line):
if not LinearSearch(word, Words):
print(word)
假设 re.findall(r"[\w']+", x)
returns x
中的单词列表。