rdkit&nlp | 运用正则表达式对smiles进行分词

对smiles化学表达式进行分词

中文语料数据为一批短文本或者长文本,比如:句子,文章摘要,段落或者整篇文章组成的一个集合。一般句子、段落之间的字、词语是连续的,有一定含义。而进行文本挖掘分析时,我们希望文本处理的最小单位粒度是词或者词语,所以这个时候就需要分词来将文本全部进行分词。

同样,对化学文本进行处理时我们希望处理的最小单位粒度是元素或者键
 

def smi_tokenizer(smi):
    """
    Tokenize a SMILES molecule or reaction
    """
    import re
    pattern =  "(\[[^\]]+]|Br?|Cl?|N|O|S|P|F|I|b|c|n|o|s|p|\(|\)|\.|=|#|-|\+|\\\\|\/|:|~|@|\?|>|\*|\$|\%[0-9]{2}|[0-9])"
    regex = re.compile(pattern)
    tokens = [token for token in regex.findall(smi)]
    assert smi == ''.join(tokens)
    return ' '.join(tokens)
    
smi_tokenizer("CC(=O)OCC1=C(C(=O)O)N2C(=O)[C@@H](NC(=O)C(OC(C)=O)c3ccccc3)[C@H]2SC1>O>CC1=C(C(=O)O)N2C(=O)[C@@H](N)[C@H]2SC1")

‘C C ( = O ) O C C 1 = C ( C ( = O ) O ) N 2 C ( = O ) [C@@H] ( N C ( = O ) C ( O C ( C ) = O ) c 3 c c c c c 3 ) [C@H] 2 S C 1 > O > C C 1 = C ( C ( = O ) O ) N 2 C ( = O ) [C@@H] ( N ) [C@H] 2 S C 1’

猜你喜欢

转载自blog.csdn.net/weixin_43236007/article/details/109671590