1031jieba使用+文本分类的一些东西

 可以添加一些专业领域的分词。

import jieba
jieba.initialize()

text = "南京市长江大桥"
text_sp = jieba.cut(text)

jieba.add_word("南京市长",99999999)  # 动态规划
jieba.add_word("江大",9999)
jieba.add_word("桥",9999)

# 动态添加词典,和下面的加载自定义词典的功能一样,只是动态添加的词典会覆盖原有的词典,而加载自定义词典则是追加到原有的词典中。

# jieba.load_userdict("myword.txt")# 加载自定义词典,加入我自己有一些想添加的词,如“南京市长”,“桥”,等等,并赋予其权重9999,使其优先识别。
# print(text_sp)
# for i in text_sp:
#     print(i,end=" ")
text_sp = list(text_sp)
print(text_sp)

文本分类,用pytorch的dataset,和dataloader

整个流程是,先拿到数据,拿数据的时候要注意空值,注意不满足数据 标签格式的数据,注意标签格式不对的数据,然后我们将数据进行一个buildword_to_index,然后开始写dataset,因为我们用的是Pytorch,所以我们前面要import,然后写自己的dataset,继承,写自己的dataset要注意三个函数,__init__,getitem,还有len,这三个函数,此处我们就不用管什么shuffle和batfchsize了,这些东西会在dataloader中设置,dataset主要是去一条一条拿到数据,然后我们将dataset传入到dataloader,参数可以将batchasize和shuffle传入其中,我们还要设置一个collate_fn,我们可以通过它去处理一个batch的数据,我们可以将一个batch的数据处理为,文本,标签,长度的格式。

from torch.utils.data import Dataset,DataLoader


def get_data(path):
    all_text = []
    all_label = []
    with open(path,"r",encoding="utf8") as f:
        all_data = f.read().split("\n")
    for data in all_data:
        try:
            if len(data) == 0:
                continue
            data_s = data.split(" ")
            if len(data_s) != 2:
                continue
            text,label = data_s
            label = int(label)

        except Exception as e:
            print(e)
        else:
            all_text.append(text)
            all_label.append(int(label))

    return all_text,all_label


def build_word2index(train_text):
    word_2_index ={"PAD":0,"UMK":1}
    for text in train_text:
        for word in text:
            if word not in word_2_index:
                word_2_index[word] = len(word_2_index)
    return word_2_index


class TextDataset(Dataset):
    #z这里继承了Dataset类,实现了__getitem__和__len__方法,还有一个很总要的__init__方法
    def __init__(self,all_text,all_lable):
        self.all_text = all_text
        self.all_lable = all_lable

    def __getitem__(self, index):
        #这里实在一条一条的返回数据
        text = self.all_text[index]
        label = self.all_lable[index]
        text_len = len(text)
        return text,label,text_len

    def process_batch_batch(self, data):
        batch_text = []
        batch_label = []
        batch_len = []

        for d in data:
            batch_text.append(d[0])
            batch_label.append(d[1])
            batch_len.append(d[2])
        min_len = min(batch_len)
        batch_text = [i[:min_len] for i in batch_text]

        return batch_text,batch_label


    def __len__(self):
        return len(self.all_text)
    #这里会告诉数据总长度,也就是数据集的大小,到后面我们再检查数据的时候,会用到这个值,我们可以通过这个数据来设置数据集的大小。



if __name__ == "__main__":
    train_text,train_lable = get_data("train.txt")
    assert len(train_lable) == len(train_text),"数据长度都不一样,你玩毛线呢?"

    word_2_index = build_word2index(train_text)

    train_batch_size = 4
    epoch = 1

    train_dataset = TextDataset(train_text,train_lable)
    train_dataloader = DataLoader(train_dataset,batch_size=train_batch_size,shuffle=False,collate_fn=train_dataset.process_batch_batch)
    #这里用道德collate_fn来处理数据,将数据处理成batch_text,batch_label,batch_len的形式,这样我们就可以直接拿到batch_text,batch_label,batch_len了。

    for e in range(epoch):
        for batch_text,batch_label in train_dataloader:
            print("*"*100)
            print(batch_text)
数据展示
今天下雨了 1
麻辣烫好吃! 2
肥猪肉不好吃。 0
啊 手动阀手 动阀  2   32 
明天会下雨吗? 1
这件衣服不好看 0
中国队赢了 2
这件衣服好看 2
男足输越南 0
世界杯马上开赛 1
的 的
的风格s 岁的法国
岁的法国 是豆腐干山豆根是德国 阿斯蒂芬

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值