Python 使用正则表达式在字典中包含一组键,并在字符串列表中匹配它们

Python 使用正则表达式在字典中包含一组键,并在字符串列表中匹配它们,python,text,nlp,data-cleaning,regexp-replace,Python,Text,Nlp,Data Cleaning,Regexp Replace,我不熟悉python中的文本清理,但我目前创建了一个包含各种俚语单词/首字母缩略词/缩略词的字典,如下所示: 全文={'BYOB':'自带啤酒','不能':'不能','芬娜':'去'}。。。等等 我还有另一个大型文本数据集: uncleaned_text=[“这是芬娜,疯了”,“我不知道为什么我们不能去那里”,“我应该知道当事情发生时,那会很糟糕”] 为此,我试图通过将匹配字典键的字符串列表中的单词替换为相应的值来“清除”。因此,我的理想输出是: 清理文本=['这将是疯狂的','我不知道为什么我

我不熟悉python中的文本清理,但我目前创建了一个包含各种俚语单词/首字母缩略词/缩略词的字典,如下所示:

全文={'BYOB':'自带啤酒','不能':'不能','芬娜':'去'}。。。等等

我还有另一个大型文本数据集:

uncleaned_text=[“这是芬娜,疯了”,“我不知道为什么我们不能去那里”,“我应该知道当事情发生时,那会很糟糕”]

为此,我试图通过将匹配字典键的字符串列表中的单词替换为相应的值来“清除”。因此,我的理想输出是:

清理文本=['这将是疯狂的','我不知道为什么我们不能在那里','我应该知道当活动是自带啤酒,这将是可怕的']

我知道我应该以某种方式使用正则表达式,我知道我应该使用循环,但我想我甚至还没有接近我应该做的,因为我得到的错误是内置函数不可写

有什么建议吗

对于未清理文本中的句子: 对于句子中的单词: 如果word位于fulltext.keys中: word.replace(word,fulltext.key)

这可能会有帮助:

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”来表示字符串(出于某种原因,我只认为它是整数),所以我绝对会将它添加到我的工具带中。是的!它非常有用。如果你觉得其中一个答案有帮助,你介意接受吗?这对每个人都有帮助,因为用户不会将此问题视为未回答的问题。