jieba安装
pip install jieba
详情参考官网项目地址
数据集
提供一份来自搜狐网的数据集(移动端网页更好爬),这里
使用bz2格式保存速度和大小较为均衡,通过pandas读入。
df = pd.read_pickle(YOUR_PATH)
使用jieba分词
要使用不同模式参考官网文档这里给出个示例,对content列进行默认模式中文分词,并去掉标点符号
import jieba.posseg as pseg
def content100_to_word(line):
try:
gen = pseg.cut(line[:100]) #对字符串前一百分词
except:
return ""
words = []
for i in gen:
if i.flag != 'x':
words.append(i.word) #只加非标点符号
return ' '.join(words) #空格分割的字符串
具体使用多少字符进行分词需要权衡数据集分布和效率。另外除了去标点,还可以去停用词如哈、呀
之类的词,网上应该有收集的列表直接用。
多进程的进度条
使用tqdm
这个库来显示,依旧是pip install tqdm
,这里直接封装成一个函数可以不用管细节:
def run_imap_mp(func, argument_list, num_processes='', is_tqdm=True):
'''
多进程与进度条结合
param:
------
func:function
函数
argument_list:list
参数列表
num_processes:int
进程数,不填默认为总核心
is_tqdm:bool
是否展示进度条,默认展示
'''
result_list_tqdm = []
try:
import multiprocessing
if num_processes == '':
num_processes = multiprocessing.cpu_count()
pool = multiprocessing.Pool(processes=num_processes)
if is_tqdm:
from tqdm import tqdm
for result in tqdm(pool.imap(func=func, iterable=argument_list), total=len(argument_list)):
result_list_tqdm.append(result)
else:
for result in pool.imap(func=func, iterable=argument_list):
result_list_tqdm.append(result)
pool.close()
except:
result_list_tqdm = list(map(func,argument_list))
return result_list_tqdm
会使用多进程的话很容易看懂。
结合上面的jieba分词测试下:(单进程情况所有数据我i5八代需要处理几十分钟)
def main():
df = pd.read_pickle(PATH)
df['content'][:10000] = run_imap_mp(content100_to_word,df['content'][:10000])
print(df['content'][:10000])
对于这种耗时较多的任务可以充分发挥多进程的优势。
核心代码已经展示在上面了