首页 > 解决方案 > Python2 标记化并添加到字典

问题描述

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

我将把每个标记放在字典中,作为具有值列表的键。

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

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

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

我将不胜感激任何帮助 :)

谢谢

标签: pythondictionarytoken

解决方案


这是你要找的吗?

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.. 然后如果字典中不存在键,它将创建它,使值成为一个空列表,然后添加您的值。


推荐阅读