我正在尝试创建一个拼写检查功能,以读取文本文件,该文本文件包含包含多个拼写错误的单词的段落。例如:“我最喜欢的科目是:物理,数学,化学树和生物学-我发现有必要在课余时间使用iPad进行综合笔记。”我有三个要解决的问题:
当前,由于该单词后面紧跟着逗号,因此该程序将Maths视为不正确的单词。我认为,为了解决此问题,最好像这样在文本文件中拆分字符串:['My','favorite','subjects','are',':','',' Physcs”,“”,“ Maths”,“ ...”等。如何在不使用任何导入的python函数(例如string或regex(re)函数)的情况下将字符串分为单词和标点符号?
我目前正在通过遍历文本文件中的每个单词,将每个单词与可接受的英语单词字典进行比较。是否有更好的方法来预处理列表,以快速识别单词是否包含给定元素以改善程序的运行时间?
有几个单词,例如“ eBook”和“ iPad”是下面函数is_valid_word
中使用的规则的例外(即,该单词必须以大写字母开头,所有其他字母均为小写或单词中的所有字符都必须大写)。有没有一种方法可以检查字符串是否是有效单词?
任何帮助将不胜感激!
def get_words():
with open( "english.txt" ) as a:
words = a.readlines()
words = [word.strip() for word in words]
return words
isWord = get_words()
def is_valid_word(st):
if isinstance(st, str):
st_lower = st.lower()
if st_lower in isWord:
if (st[0:len(st)].isupper() or st[0:len(st)].islower()) or (st[0].isupper() and st[1:len(st)].islower()) or st[0:len(st)].isupper():
return (True)
else:
return(False)
else:
return (False)
else:
return (False)
def spell_check_file( file ):
incorrectWords = [] # Will contain all incorrectly spelled words.
num = 0 # Used for line counter.
with open(file, 'r') as f:
for line_no, line in enumerate(f):
for word in line.split():
if is_valid_word(word) == False:
incorrectWords.append(line_no)
incorrectWords.append(word)
for f in incorrectWords:
return incorrectWords
print (incorrectWords)
spell_check_file("passage.txt")
答案 0 :(得分:0)
这种任务就是正则表达式的用途。尝试不使用正则表达式是一种自我惩罚的方式。
>>> import re
>>> pattern = re.compile(r"[\w']+|\s+|[^\w'\s]+")
>>> pattern.findall("My favorite subjects are: Physics, Maths, Chemistry")
['My', ' ', 'favorite', ' ', 'subjects', ' ', 'are', ':', ' ', 'Physics', ',',
' ', 'Maths', ',', ' ', 'Chemistry']
请注意,我在与单词匹配的部分中加入了'
,因此“不”之类的单词将保留为一个整体。