Python 使用正则表达式在字典中包含一组键,并在字符串列表中匹配它们
我不熟悉python中的文本清理,但我目前创建了一个包含各种俚语单词/首字母缩略词/缩略词的字典,如下所示: 全文={'BYOB':'自带啤酒','不能':'不能','芬娜':'去'}。。。等等 我还有另一个大型文本数据集: uncleaned_text=[“这是芬娜,疯了”,“我不知道为什么我们不能去那里”,“我应该知道当事情发生时,那会很糟糕”] 为此,我试图通过将匹配字典键的字符串列表中的单词替换为相应的值来“清除”。因此,我的理想输出是: 清理文本=['这将是疯狂的','我不知道为什么我们不能在那里','我应该知道当活动是自带啤酒,这将是可怕的'] 我知道我应该以某种方式使用正则表达式,我知道我应该使用循环,但我想我甚至还没有接近我应该做的,因为我得到的错误是内置函数不可写 有什么建议吗 对于未清理文本中的句子: 对于句子中的单词: 如果word位于fulltext.keys中: word.replace(word,fulltext.key)这可能会有帮助:Python 使用正则表达式在字典中包含一组键,并在字符串列表中匹配它们,python,text,nlp,data-cleaning,regexp-replace,Python,Text,Nlp,Data Cleaning,Regexp Replace,我不熟悉python中的文本清理,但我目前创建了一个包含各种俚语单词/首字母缩略词/缩略词的字典,如下所示: 全文={'BYOB':'自带啤酒','不能':'不能','芬娜':'去'}。。。等等 我还有另一个大型文本数据集: uncleaned_text=[“这是芬娜,疯了”,“我不知道为什么我们不能去那里”,“我应该知道当事情发生时,那会很糟糕”] 为此,我试图通过将匹配字典键的字符串列表中的单词替换为相应的值来“清除”。因此,我的理想输出是: 清理文本=['这将是疯狂的','我不知道为什么我
import re
fulltext = {"BYOB": "bring your own beer", "couldn't": "could not", "finna": "going to"}
uncleaned_text = ["This is finna be crazy", "I don't know why we couldn't be there", "I should have known when the event was BYOB that it would be terrible"]
cleaned_text = []
keys = fulltext.keys()
for text in uncleaned_text:
for key in keys:
if key in text:
cleaned_text.append(re.sub(key,fulltext[key],text))
print("cleaned_text => ",cleaned_text)
但是,如果由于嵌套for循环而有大量数据,则此代码将需要很长时间才能运行。这可能会有帮助:
import re
fulltext = {"BYOB": "bring your own beer", "couldn't": "could not", "finna": "going to"}
uncleaned_text = ["This is finna be crazy", "I don't know why we couldn't be there", "I should have known when the event was BYOB that it would be terrible"]
cleaned_text = []
keys = fulltext.keys()
for text in uncleaned_text:
for key in keys:
if key in text:
cleaned_text.append(re.sub(key,fulltext[key],text))
print("cleaned_text => ",cleaned_text)
但是,如果由于嵌套for循环而有大量数据,则此代码将需要很长时间才能运行。您收到的错误是因为
字典。键是函数而不是列表。因此,要获取所有键,您需要使用fulltext.keys()
而不是fulltext.keys
。dictionary类的keys成员是一个返回键列表的函数。检查字典键中是否存在特定单词的更为通俗的方法是:if-key-in-dictionary
。
运算符中的检查左操作数是否是字典中的键,因此不必使用.keys
函数
对于函数的其余部分,我将执行以下操作:
clean_text = []
for sentence in uncleaned_text:
for word in sentence.split():
if word in fulltext:
sentence = sentence.replace(word, fulltext[word])
clean_text.append(sentence)
我所做的改变解释如下:
你需要把这个句子分成几个词。这个句子只是一个长字符串,所以如果你对它进行迭代,你会得到这个句子的每个字符。默认情况下,.split方法在每个空间上拆分它
replace方法不会就地更改字符串,因此必须在其他变量中捕获它
要从字典中获取值,需要使用键。在本例中,Word是我们的关键字,因此我将fulltext.key
更改为fulltext[Word]
。这将从全文字典中获取与word
关联的值
添加了一个数组以将更改的句子附加到其中
这将使原始列表(未清除的文本
)保持不变。您收到的错误是因为字典。键
是一个函数,而不是列表。因此,要获取所有键,您需要使用fulltext.keys()
而不是fulltext.keys
。dictionary类的keys成员是一个返回键列表的函数。检查字典键中是否存在特定单词的更为通俗的方法是:if-key-in-dictionary
。
运算符中的检查左操作数是否是字典中的键,因此不必使用.keys
函数
对于函数的其余部分,我将执行以下操作:
clean_text = []
for sentence in uncleaned_text:
for word in sentence.split():
if word in fulltext:
sentence = sentence.replace(word, fulltext[word])
clean_text.append(sentence)
我所做的改变解释如下:
你需要把这个句子分成几个词。这个句子只是一个长字符串,所以如果你对它进行迭代,你会得到这个句子的每个字符。默认情况下,.split方法在每个空间上拆分它
replace方法不会就地更改字符串,因此必须在其他变量中捕获它
要从字典中获取值,需要使用键。在本例中,Word是我们的关键字,因此我将fulltext.key
更改为fulltext[Word]
。这将从全文字典中获取与word
关联的值
添加了一个数组以将更改的句子附加到其中
这将使原始列表(未清理的文本
)保持不变。谢谢!这绝对有帮助。谢谢!这绝对是有帮助的。谢谢。这很有意义!!我没有意识到我也可以用“in”来表示字符串(出于某种原因,我只认为它是整数),所以我绝对会将它添加到我的工具带中。是的!它非常有用。如果你觉得其中一个答案有帮助,你介意接受吗?这对每个人都有帮助,因为用户不会将此问题视为未回答的问题。谢谢,这很有意义!!我没有意识到我也可以用“in”来表示字符串(出于某种原因,我只认为它是整数),所以我绝对会将它添加到我的工具带中。是的!它非常有用。如果你觉得其中一个答案有帮助,你介意接受吗?这对每个人都有帮助,因为用户不会将此问题视为未回答的问题。