我試圖從網絡論壇中抽取大量自然語言,並使用PyEnchant更正拼寫。該文本通常是非正式的,關於醫療問題,所以我創建了一個包含相關醫療詞語,聊天縮略語等的文本文件「test.pwl」。在某些情況下,不幸的是,一點點的HTML,網址等都留在它裏面。PyEnchant將字典中的單詞「糾正」爲不在字典中的單詞
我的腳本旨在同時使用en_US詞典和PWL來查找所有拼寫錯誤的單詞,並將它們完全自動更正爲d.suggest的第一個建議。它打印的拼寫錯誤的單詞,然後是沒有建議的單詞列表列表,並修正文本寫入「spellfixed.txt」:
import enchant
import codecs
def spellcheckfile(filepath):
d = enchant.DictWithPWL("en_US","test.pwl")
try:
f = codecs.open(filepath, "r", "utf-8")
except IOError:
print "Error reading the file, right filepath?"
return
textdata = f.read()
mispelled = []
words = textdata.split()
for word in words:
# if spell check failed and the word is also not in
# mis-spelled list already, then add the word
if d.check(word) == False and word not in mispelled:
mispelled.append(word)
print mispelled
for mspellword in mispelled:
#get suggestions
suggestions=d.suggest(mspellword)
#make sure we actually got some
if len(suggestions) > 0:
# pick the first one
picksuggestion=suggestions[0]
else: print mspellword
#replace every occurence of the bad word with the suggestion
#this is almost certainly a bad idea :)
textdata = textdata.replace(mspellword,picksuggestion)
try:
fo=open("spellfixed.txt","w")
except IOError:
print "Error writing spellfixed.txt to current directory. Who knows why."
return
fo.write(textdata.encode("UTF-8"))
fo.close()
return
的問題是,輸出通常包含單詞「改正」無論是字典還是pwl。例如,當輸入的第一部分是:
我的新醫生覺得我現在是雙極的。對此,經過9年的被認爲majorly由其他人
鬱悶,我得到這個:
我的新dotor覺得我現在兩極。這個,aftER 9年被其他人大大沮喪了
我可以處理案件的變化,但醫生 - > dotor根本就沒有好處。當輸入短得多(例如,上面的報價是整個輸入),結果是可取的:
我的新醫生認爲我現在是兩極的。這是經過9年被大家沮喪的被其他人鄙視之後
難道有人向我解釋爲什麼?用非常簡單的話來說,因爲我對編程非常陌生,對Python更新。一步一步的解決方案將不勝感激。
謝謝隊友。我知道正則表達式,但是對於編程和Python來說是如此的新鮮,我不知道如何在我的代碼中實現邊界分隔符。線索? – user2437842
我在做些什麼:textdata = textdata.replace(「\\ b」+ mspellword +「\\ b」,「\\ b」+ picksuggestion +「\\ b」) – user2437842
@ user2437842不是,您需要要使用像re.sub而不是字符串replace的正則表達式函數。查看我的答案以及[documentation]中的代碼(http://docs.python.org/2/library/re.html#re.sub)。你可以構造正則表達式爲「\\ b」+ re.escape(mspellword)+「\\ b」'。你想插入的文本作爲替換('picksuggestion')不應該被轉換成正則表達式。 – svk