使用python对json数据进行预处理、分词、fasttext词向量

使用python对json数据进行预处理、分词、fasttext词向量

note: 1. 在编写程序是尽量使本地编译环境和服务器编译环境保持一致,如果 不一致可能后导致移植后程序报错。

#第一步,预处理json数据集

  1. 合并json数据集
    由于本项目的数据集书爬取网站上的数据,并存储为.json格式。故有两种解决方案:
    方案一:对文件挨个读取并且处理
    方案二:合并.json数据集为一个文件夹
    原始数据集文件,文件是在all_data目录下面
#coding = utf-8
import io
import os
filenames = os.listdir('all_data')
#由于服务器使用的python是2.7版本,故读取的时候需要使用io
f = io.open('data/test.json','w','encoding = utf-8')
#遍历文件名
for filename in filenames:
	filepath = 'all_data/'+filename
	#先遍历单个文件
	g = io.open(filepath,'r','encoding = utf-8')
	#合并文件的时候,每合并一个文件夹都需要加一个换行符,否则无法识别json
	f.write(g.read()+'\n')
f.close()

合并后的文件是data/test.json文件

  1. 去掉文件内容中的\n,使用replace代替。提取json数据中的title和content标签中的内容
#encoding=utf-8
import json
import io
f = io.open("data/text.json",'r',encoding='utf-8')
for line in f.readlines():
    #替换json中的\n字符为空字符
    line=line.replace("\\n","")
    #将json格式转化为python格式
    lines = json.loads(line) 
    #提取json数据中的title和content的内容
    ti=lines['title']
    content=lines['content']
    #将处理后的文件存储在process_data/data.txt文件中
    f = io.open("process_data/data.txt",'a',encoding='utf-8')
    f.write(ti)
    f.write(content)
f.close()

#第二步,使用jieba分词对数据集进行分词
jieba分词目前已经非常成熟,再此不做赘述,以下是项目中的代码

#encoding=utf-8
import jieba
f=open("process_data/data.txt","r",encoding='utf-8')
line=f.readline()
#使用精确模式对数据集进行分词
seg_list = jieba.cut(line, cut_all=False)
data=" ".join(seg_list)
f=open("jieba_data/data_jieba.txt","w",encoding='utf-8')
f.write(data)

#第三步,使用fasttext跑一遍分词结果
在服务器中使用如下代码

./fasttext cbow -input data.txt -output result  -epoch 30 -neg 5 -loss ns -dim 100 -ws 5

result表示的是训练完成后生成的result.vec和result.bin 文件
其中result.vec文件包含单词的vectors,每行一个;result.bin是一个二进制文件,包含模型参数、字典、所有hyper参数。二进制文件用于计算单词向量或重启优化。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Jina 中,可以使用 executors 来实现将分词转为词向量的功能。常见的词向量模型有 Word2Vec、GloVe、FastText 等,这里以使用预训练的 Word2Vec 模型为例。 首先,在 `jina/exectuors/` 目录下创建一个新的 Python 文件,例如 `word2vec.py`。然后,导入 gensim 库和 BaseExecutor 类: ```python from gensim.models import KeyedVectors from jina.executors import BaseExecutor ``` 在 `word2vec.py` 文件中,定义一个 Word2VecExecutor 类,继承自 BaseExecutor 类,用于加载预训练的 Word2Vec 模型和将分词转为词向量: ```python class Word2VecExecutor(BaseExecutor): def __init__(self, model_path='data/word2vec.bin', *args, **kwargs): super().__init__(*args, **kwargs) self.model_path = model_path self.model = KeyedVectors.load_word2vec_format(model_path, binary=True) def encode(self, data, *args, **kwargs): return self.model[data] ``` 在 `__init__` 方法中,加载预训练的 Word2Vec 模型。在 `encode` 方法中,将分词作为输入数据使用模型将其转为词向量,并返回结果。 最后,将这个 executor 添加到 Jina 流程中。在 `jina/config.yml` 文件中添加以下代码: ```yaml executors: - name: word2vec py_modules: word2vec metas: py_modules_version: '1.0' parameters: model_path: data/word2vec.bin flows: encode: uses: word2vec ``` 这个配置文件中,定义了一个名为 `word2vec` 的 executor,并指定预训练模型的路径。在 `flows` 中,使用 `word2vec` executor 将输入数据转为词向量。 现在,使用以下代码启动 Jina: ```bash jina pod --uses config.yml --port-in 55555 --port-out 55556 ``` 在另一个终端中,可以使用以下代码测试这个 executor: ```python from jina import Client, Document client = Client(port=55555) doc = Document(text='hello world') resp = client.encode([doc], output_fn=lambda x: x[0].embedding) print(resp) ``` 这个代码会将字符串 `'hello world'` 转为词向量,并输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值