使用线性搜索的Python拼写检查器

时间:2018-04-14 10:57:07

标签: python linear-search

我正在尝试使用线性搜索来编写一个拼写检查程序,它将莎士比亚的全部作品与一个10,000字的词典进行比较。我希望代码输出Shakespeares全集中的所有单词,这些单词不在字典中。我附上了当前输出的图片以及我正在寻找的输出图片。我目前拥有的代码不会产生任何错误,但是从当前输出中可以看出莎士比亚全部的所有单词。感谢您的任何帮助。

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))

1 个答案:

答案 0 :(得分:1)

问题是x中的LinearSearch(x, Words)不是单词,而是一行。因此,每行都会打印,因为一行可能与单词不匹配。你需要这样做:

for line in lines:
    for word in re.findall(r"[\w']+", line):
        if not LinearSearch(word, Words):
            print(word)

假设re.findall(r"[\w']+", x)返回x中的字词列表。