我阅读了如何检查字典单词
并且我想到了使用字典检查我的文本文件。我已经阅读了pyenchant说明,我想如果我用它get_tokenizer
来把文本文件中的所有字典单词都还给我。
所以这就是我卡住的地方:我希望我的程序以段落的形式给我所有的字典单词组。一旦遇到任何垃圾字符,就认为是一个段落中断,并忽略从那里开始的所有内容,直到找到 X 个连续单词。
我希望它按顺序读取文本文件filename_nnn.txt
,解析它,然后写入parsed_filname_nnn.txt
. 我还没有做任何文件操作。
到目前为止我所拥有的:
import enchant
from enchant.tokenize import get_tokenizer, HTMLChunker
dictSentCheck = get_tokenizer("en_US")
sentCheck = raw_input("Check Sentense: ")
def check_dictionary():
outcome = dictCheck.check(wordCheck)
test = [w[0] for w in dictSentCheck(sentCheck)]
- - - 示例文本 - - -
2008 年 6 月 25 日,星期三,英国板球与津巴布韦断绝关系 text<void(0);><void(0);> <void(0);>email <void(0);>打印 EMAIL THIS ARTICLE 您的姓名:您的电子邮件地址:收件人姓名:收件人的电子邮件地址:<;>添加另一个收件人您的评论:发送邮件< ;void(0);> 关闭此表格 < http://ad.au.doubleclick.net/jump/sbs.com.au/worldnews;sz=300x250;tile=2;ord=123456789?> ; 英格兰和威尔士板球委员会(ECB)宣布暂停与津巴布韦的所有联系,并取消津巴布韦明年的英格兰之旅。
该脚本应返回:
英国板球周三与津巴布韦断绝关系
英格兰和威尔士板球委员会(ECB)宣布暂停与津巴布韦的所有联系,并取消津巴布韦明年的英格兰之旅
我接受了阿巴纳特的回应。下面是我的最终脚本。请注意,这是非常低效的,应该清理一些。另外免责声明我很久以前大学以来就没有编码过。
import enchant
from enchant.tokenize import get_tokenizer
import os
def clean_files():
os.chdir("TARGET_DIRECTORY")
for files in os.listdir("."):
#get the numbers out file names
file_number = files[files.rfind("_")+1:files.rfind(".")]
#Print status to screen
print "Working on file: ", files
#Read and process original file
original_file = open("name_"+file_number+".txt", "r+")
read_original_file = original_file.read();
#Start the parsing of the files
token_words = tokenize_words(read_original_file)
parse_result = ('\n'.join(split_on_angle_brackets(token_words,file_number)))
original_file.close()
#Commit changes to parsed file
parsed_file = open("name_"+file_number+"_parse.txt", "wb")
parsed_file.write(parse_result);
parsed_file.close()
def tokenize_words(file_words):
tokenized_sentences = get_tokenizer("en_US")
word_tokens = tokenized_sentences(file_words)
token_result = [w[0] for w in word_tokens]
return token_result
def check_dictionary(dict_word):
check_word = enchant.Dict("en_US")
validated_word = check_word.check(dict_word)
return validated_word
def split_on_angle_brackets(token_words, file_number):
para = []
bracket_stack = 0
ignored_words_per_file = open("name_"+file_number+"_ignored_words.txt", "wb")
for word in token_words:
if bracket_stack:
if word == 'gt':
bracket_stack -= 1
elif word == 'lt':
bracket_stack += 1
else:
if word == 'lt':
if len(para) >= 7:
yield ' '.join(para)
para = []
bracket_stack = 1
elif word != 'amp':
if check_dictionary(word) == True:
para.append(word)
#print "append ", word
else:
print "Ignored word: ", word
ignored_words_per_file.write(word + " \n")
if para:
yield ' '.join(para)
#Close opened files
ignored_words_per_file.close()
clean_files()