已知有一个正确单词索引表(保存在当前目录下的文件index.txt中,且全为小写字母,按照字典序由小到大排列,每个单词独占一行),编写程序利用该单词表对某一英文文章(保存在当前目录下的另一个文件in.txt中)进行单词正确性检查,若该英文文章中出现的单词(只有连续字母组成)没有出现在单词索引文件中(检查时大小写无关),则将该出错的单词(其中的字母全部转换为小写)输出到当前目录下的另一文件error.txt中,每个单词独占一行,并且以字典序由小到大的顺序输出。 假设: 1、in.txt中的文章有可能没有经过排版,格式有可能杂乱无章,也有可能没有写完整。 2、index.txt中的单词个数不超过1000个,每个单词的长度不超过50个字母。 3、若出错的单词多次出现,则多次输出。python
时间: 2024-01-22 09:19:23 浏览: 88
可以按照以下步骤实现:
1. 读取单词索引表,保存每个单词到一个集合中(为了快速查找)。
2. 读取英文文章,将其中的单词提取出来(只保留连续字母组成的字符串),并全部转换成小写。
3. 对于每个提取出来的单词,判断是否在单词索引集合中出现,如果没有出现则将其输出到错误文件中。
4. 将输出的错误单词按照字典序排序,并写入到错误文件中。
以下是实现代码:
```python
# 读取单词索引表
with open('index.txt', 'r') as f:
word_set = set(line.strip().lower() for line in f)
# 读取英文文章,提取单词
with open('in.txt', 'r') as f:
text = f.read()
words = [word.lower() for word in re.findall(r'\b[a-zA-Z]+\b', text)]
# 检查单词是否在索引表中出现,输出错误单词
errors = sorted(set(word for word in words if word not in word_set))
with open('error.txt', 'w') as f:
f.write('\n'.join(errors))
```
注意在代码中使用了正则表达式 `r'\b[a-zA-Z]+\b'` 来提取单词。该正则表达式表示匹配一个或多个连续的字母组成的单词。`\b` 表示单词边界,确保只匹配完整的单词。`\b` 前后的 `[]` 表示匹配任意一个字母。`+` 表示匹配一个或多个连续的字母。`re.findall` 函数会返回所有匹配的结果,保存在一个列表中。
阅读全文