Reputation: 1740
This is my string, for which I have split the string to words
data is the collection of correct words
sentence is the string which contains some incorrect words which needs to be replaced with the corrected once
data="blue whale","red rose","city of joy","dream pride","rain drops","ten house","think twice"
data=[words for segments in data for words in segments.split()]
sentence = ["I'll have to thnik twycee before going to ceety of joiy along with red rossy"]
sentence = sentence.split()
now I'm trying to spell check
def words(text): return re.findall(r'\w+', text.lower())
WORDS = Counter(data)
def P(word, N=sum(WORDS.values())):
"Probability of `word`."
return WORDS[word] / N
def correction(word):
"Most probable spelling correction for word."
return max(candidates(word), key=P)
def candidates(word):
"Generate possible spelling corrections for word."
return (known([word]) or known(edits1(word)) or known(edits2(word)) or [word])
def known(words):
"The subset of `words` that appear in the dictionary of WORDS."
return set(w for w in words if w in WORDS)
def edits1(word):
"All edits that are one edit away from `word`."
letters = 'abcdefghijklmnopqrstuvwxyz'
splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]
deletes = [L + R[1:] for L, R in splits if R]
transposes = [L + R[1] + R[0] + R[2:] for L, R in splits if len(R)>1]
replaces = [L + c + R[1:] for L, R in splits if R for c in letters]
inserts = [L + c + R for L, R in splits for c in letters]
return set(deletes + transposes + replaces + inserts)
def edits2(word):
"All edits that are two edits away from `word`."
return (e2 for e1 in edits1(word) for e2 in edits1(e1))
Now what I want to do is that I want to replace all the incorrect words with the corrected words and update in the object sentence
correction('thnik')
O/P
think
code for updating the object "sentence"
for i in sentence:
sentence = correction(i)
sentence = [sentence.append(i)]
print(sentence)
as the program would check for all given words and would output the result, I would join them all using sentence = ' '.join(sentence)
but the for loop code gives my error "AttributeError: 'str' object has no attribute 'append'"
, any help would be much appreciated. Thanks
Upvotes: 0
Views: 3379
Reputation: 97
sentence = "Thsi is my cdoe" #Lets assume this is your sentence.
formatted_sentence = ''
for i in sentence:
corrected_word = correction(i) # if "Thsi" is passed to correction it should return "This"
formatted_sentence += ' '.join(corrected_word)
print(formatted_sentence)
Upvotes: 1