On this page

    jieba

    lcut

    jieba.cut生成的是一个生成器,generator,也就是可以通过for循环来取里面的每一个词。

    word_list= [word for word in jieba.cut(text)]
    

    jieba.lcut 直接生成的就是一个list

    text = "深度学习(英语: deep learning)是机器学习的分支, 是一种以人工神经网络为架构, 对数据进行表征学习的算法。"
    
    cuted = jieba.lcut(text)
    print(cuted)
    
    Building prefix dict from the default dictionary ...
    Loading model from cache /tmp/jieba.cache
    Loading model cost 0.474 seconds.
    Prefix dict has been built successfully.
    ['深度', '学习', '(', '英语', ':', ' ', 'deep', ' ', 'learning', ')', '是', '机器', '学习', '的', '分支', ',', ' ', '是', '一种', '以', '人工神经网络', '为', '架构', ',', ' ', '对', '数据', '进行', '表征', '学习', '的', '算法', '。']
    

    posseg

    词性(词类)是词汇中剧本的语法属性,而词性标注是在给定句子中判定每个词的语法范畴,确定它的词性并加以标注的过程。

    比如给定句子“她很漂亮”,对应的词性标注结果就是“她/名词 很/副词 漂亮/形容词”,这就是一个简单的词性标注的例子。

    import jieba.posseg as pseg
    words = pseg.cut("在武汉市到苏州社保后可以补缴")
    # type(words) = <class 'generator'>
    >>> [w for w in words]
    >[pair('在', 'p'), pair('武汉市', 'ns'), pair('到', 'v'), pair('苏州', 'ns'), pair('社保', 'j'), pair('后', 'f'), pair('可以', 'c'), pair('补缴', 'v')]
    
    >>> [w.flag for w in words]
    >['p', 'ns', 'v', 'ns', 'j', 'f', 'c', 'v']
    
    >>> [w.word for w in words]
    >['在', '武汉市', '到', '苏州', '社保', '后', '可以', '补缴']
    

    kashgari

    hanziconv

    繁体中文转换(官方hanziconv) 可以转换夹杂其他字符如数字

    from hanziconv import HanziConv
    
    line_jian = '<>123asdasd把中文字符串进行繁体和简體间的转换'
    line_fan = '<>123asdasd把中文字符串進行繁體和簡体间的轉換'
    jian = HanziConv.toSimplified(line_fan)				#繁转简
    fan = HanziConv.toTraditional(line_jian)			#简转繁
    resu = HanziConv.same(line_jian, line_fan)			#比较繁简体文字是否相同
    print(jian)
    print(fan)
    print(resu)
    

    输出结果:

    <>123asdasd把中文字符串进行繁体和简体间的转换
    <>123asdasd把中文字符串進行繁體和簡體間的轉換
    True
    
    

    segtok

    segtok包提供两个模块, segtok.segmenter 和 segtok.tokenizer 。

    分段器提供将(印欧语)文本拆分为句子的功能。

    标记赋予器提供了将(印欧语系)句子拆分为单词和符号(统称为 标记 )的功能。

    这两个模块也可以从命令行使用。 虽然其他印欧语系的语言也可以使用,但它的设计只考虑了西班牙语、英语和德语等语言。

    re

    正则表达式模式

    模式字符串使用特殊的语法来表示一个正则表达式:

    字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。

    多数字母和数字前加一个反斜杠时会拥有不同的含义。

    标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。

    反斜杠本身需要使用反斜杠转义。

    由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r’\t’,等价于 ‘\t’)匹配相应的特殊字符。

    模式 描述
    ^ 匹配字符串的开头
    $ 匹配字符串的末尾
    . 匹配任意字符, 除了换行符, 当re.DOTALL标记被指定时, 则可以匹配包括换行符的任意字符
    re? 匹配0个或1个由前面正则表达式定义的片段, 非贪婪方式

    re?

    s = "<lalaala/> test <ttttt />"
    text = re.sub("<.*?>", " ", s, flags=re.S)
    print(text)
    

    返回:

      test  
    
    s = "<lalaala/> test <ttttt />"
    text = re.sub("<.*>", " ", s, flags=re.S)
    print(text)
    

    返回

          
    

    非贪婪模式就是碰到一个合适的就替换了, 不会等到最后。

    sub

    Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。

    re.sub(pattern, repl, string, count=0, flags=0)
    

    可选flags:

    pickle

    dump

        ws = Word2Sequence()
        data_path = "./datasets/aclImdb/train"
        temp_data_path = [os.path.join(data_path, "pos"), os.path.join(data_path, "neg")]
        for data_path in temp_data_path:
            file_paths = [os.path.join(data_path, file_name) for  file_name in os.listdir(data_path) if file_name.endswith("txt")]
            for file_path in tqdm(file_paths):
                sentence = tokenize(open(file_path).read())
                ws.fit(sentence)
    			
    	ws.build_vocab(min=10, max_features=20000)
        print(ws.dict)
        pickle.dump(ws, open("./saved_models/ws.pkl", "wb"))
        print(len(ws))
    

    load

    加载pickle时, 需要先将保存的类import

    如:

    import pickle
    from word_sequence import Word2Sequence
    
    ws = pickle.load(open("./saved_models/ws.pkl", "rb"))
    print(ws.dict)
    

    任何文件引入这个ws, 都需要先引入Word2Sequence

    FastText

    pysparnn

    Spacy

    模板代码

    解析json文件为txt(以LCCD数据集为例)

    import json
    
    with open("data/LCCD.json", 'rb') as f:
        data = json.load(f)
    
    with open("data/LCCD.txt", "w", encoding="utf-8") as f:
        for dialogue_index, dialogues in enumerate(tqdm(data)):
            for dialogue in dialogues:
                f.write(dialogue.replace(' ', '') + '\r\n')
            # 最后一条记录不添加换行符
            if dialogue_index < len(data) - 1:
                f.write("\r\n")
    

    References

    1. Python中汉字繁简体互转
    2. fastText
    3. jieba.cut 和jieba.posseg
    4. Python 程序报错: No module named transformers.modeling_gpt2