python - 自动更正功能错误:字符串 2 列表
问题描述
我正在尝试自动更正提取的推文中的单词。我检查了文本类型。<>
但错误显示“AttributeError:'list' 对象没有属性'lower'”,即它是一个列表对象......我该如何解决这个问题。
我对python很陌生...请帮助我解决错误。
text=remove_punctuation(clean_emoji(remove_rt(strip_links(tweet.text))))
print(type(text))
#SOURCE_CODE: https://norvig.com/spell-correct.html
def words(text): return re.findall(r'\w+', text.lower())
WORDS = Counter(words(open('C:/Users/Paromita/Desktop/Travel Recommendation/big.txt').read())) #count all the words in "big.txt" document
#import Counter
def P(word, N=sum(WORDS.values())): #provides probability of the word
return WORDS[word] / N
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))
def candidates(word): #Generate possible spelling corrections for word.
return (known([word]) or known(edits1(word)) or known(edits2(word)) or [word])
def correction(word): # Most probable spelling correction for word
return max(candidates(word), key=P)
def autocorrect(word):
for w in words(text):
word=word.replace(w,correction(w))
return word
错误:
<ipython-input-124-2d46c58aaf5d> in autocorrect(word)
29
30 def autocorrect(word):
---> 31 for w in words(text):
32 word=word.replace(w,correction(w))
33 return word
<ipython-input-124-2d46c58aaf5d> in words(text)
1 #SOURCE_CODE: https://norvig.com/spell-correct.html
2
----> 3 def words(text): return re.findall(r'\w+', text.lower())
4 WORDS = Counter(words(open('C:/Users/Paromita/Desktop/Travel Recommendation/big.txt').read())) #count all the words in "big.txt" document
5 #import Counter
AttributeError: 'list' object has no attribute 'lower'
解决方案
看起来像是text
一个字符串列表。
尝试:
def words(text):
return re.findall(r'\w+', " ".join(text).lower())
推荐阅读
- adfs - ADFS 声明规则字符串连接可能吗?
- excel - 多次调用函数
- android - 如何使用 Kotlin 从用户那里获取名称并将其显示在 Toast 中?
- python - AttributeError: 'Series' object has no attribute 'as_matrix' 为什么会出错?
- java - Android - 收到推送通知 FCM 后,如何在我的 Activity 中更新数据或 UI?
- c# - 空合并赋值运算符的行为
- kubernetes - Kubernetes。是否可以将卷安装到包含 pod id 的路径?
- file - DSpace 文件的位置
- r - 更改数据框列表中的一列并使用应用函数保留 changde 数据框而不是更改输出
- c# - 在 WebBrowser 控件中获取 HtmlElement 的当前/计算样式