Python2标记化并添加到字典

时间:2019-12-17 18:04:18

标签: python dictionary token

我需要一些文本来生成按空格分割的标记。
此外,我需要删除所有标点符号,因为我需要删除双括号[[]中的所有内容(包括双括号)。

每个令牌我都将放入字典作为具有值列表的键。

我已经尝试过使用正则表达式删除这些双花括号模式(if-elses ...),但是找不到有效的解决方案。目前,我有:

tokenDic = dict()
splittedWords =  re.findall(r'\[\[\s*([^][]*?)]]',  docs[doc], re.IGNORECASE) 
tokenStr = splittedWords.split()

for token in tokenStr:
    tokenDic[token].append(value);

我将不胜感激:)

谢谢

2 个答案:

答案 0 :(得分:2)

这是您要找的吗?

import re
value_list = []
inp_str = 'blahblah[[blahblah]]thi ng1[[junk]]hmm'
tokenDic = dict()
#remove everything in double brackets
bracket_stuff_removed = re.sub(r'\[\[[^]]*\]\]', '', inp_str)

#function to keep only letters and digits
clean_func = lambda x: 97 <= ord(x.lower()) <= 122 or 48 <= ord(x) <= 57

for token in bracket_stuff_removed.split(' '):
    cleaned_token = ''.join(filter(clean_func, token))
    tokenDic[cleaned_token] = list(value_list)

print(tokenDic)

输出:

{'blahblahthi': [], 'ng1hmm': []}

关于追加到列表中,我现在没有足够的信息来告诉您您所处情况的最佳方法。

如果要在添加键时设置值,请执行以下操作:

tokenDic[cleaned_token] = [val1, val2, val3]

如果要在添加密钥后设置值,请执行以下操作:

val_to_add = "something"
if tokenDic.get(cleaned_token, -1) == -1:
    print('ERROR', cleaned_token, 'does not exist in dict')
else:
    tokenDic[cleaned_token].append(val_to_add)

如果在两种情况下都希望直接附加到字典,则需要使用defaultdict(list)而不是dict.。然后,如果字典中不存在键,它将创建该键,并赋值一个空列表,然后添加您的值。

答案 1 :(得分:1)

要删除[[]]中的所有内容,您可以使用re.sub,并且您已经具有正确的正则表达式,因此只需执行此操作。

 x = [[hello]]w&o%r*ld^$
 y = re.sub("\[\[\s*([^][]*?)]]","",x)
 z = re.sub("[^a-zA-Z\s]","",y)
 print(z)

这将打印“世界”