《懒人Shell脚本》之二——语料库的格式化输出

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
NLP自然语言处理_基础版,每接口每天50万次
简介: 1、引言在进行自然语言处理(NLP)处理的时候,基本的操作无外乎分词、分类、聚类、命名实体识别、规则过滤、摘要提取、关键字提取、词性标注、拼音标注等。

1、引言

在进行自然语言处理(NLP)处理的时候,基本的操作无外乎分词、分类、聚类、命名实体识别、规则过滤、摘要提取、关键字提取、词性标注、拼音标注等。

分类通用的做法就是根据提供的语言库自学习识别成对应的分类。现有的复旦大学提供的语料库有20种分类。(参考:http://www.nlpir.org/?action-viewnews-itemid-103),网上也有提供更多种分类的。

分词网上比较NB的几个实验室有:

1)、背景理工大学张华平副教授的 nlp 自然语言处理与信息共享检索平台http://ictclas.nlpir.org/nlpir/

2)、哈工大“语言云” 以哈工大社会计算与信息检索研究中心研发的 “语言技术平台(LTP)” http://www.ltp-cloud.com/demo/

(本段摘自网络)文本分类语料库(复旦)测试语料由复旦大学李荣陆提供。answer.rar为测试语料,共9833篇文档;train.rar为训练语料,共9804篇文档,分为20个类别。训练语料和测试语料基本按照1:1的比例来划分。收集工作花费了不少人力和物力,所以请大家在使用时尽量注明来源(复旦大学计算机信息与技术系国际数据库中心自然语言处理小组)。文件较大(训练测试各50多兆)。

实际项目中需要根据自己的需要进行定制处理。


2、需求点

结合口头需求,我整理出下面的两个核心需求点。

需求1:以中文形式输出语料库中包含的全部文件类型到一个类型文件outtype.txt。

需求2:将预料库中的所有文件以[EndEnd]结尾并合并,导出到数据文件outdata.txt。

其中文件路径和文件个数如下,累计文件综合近1.3GB。

image.png

第一列为文件类型,第二列为文件的个数。


3、需求分析

需求1:

1)每个类别命名的文件夹下存放的就是该类别的文件。统计下该类别下文件的个数cnt。

2)内层循环cnt次,文件名追加输出到一个文件。

3)外层循环20次(一共20类预料)即可。

需求2:

1)每个文件末尾追加[EndEnd];

2) 便利每个路径下的文件合成一个文件。

细节注意事项:需求1的类别和需求2的以[EndEnd]结束的文件要一一对应,一旦对应偏了,整个工作都会白费。


4、脚本实现

#author:http://blog.csdn.net/laoyang360

#date:20160304 pm22:38

#version:V0.1

#!/bin/bash


#the dir for use

DIR_NAME=./train

OUT_RESULT=./out_result

CNT_FILE=files_cnt.txt

NAME_FILE=all_file_dir.txt

TOTAL_TYPES_FILE=$OUT_RESULT/outtype.txt

TOTAL_TYPES_BAK_FILE=total_types_bak.txt

TOTAL_OUTFILE=$OUT_RESULT/outdata.txt


#clear the existing contents

function initialize()

{

mkdir $OUT_RESULT

cat /dev/null > $CNT_FILE

cat /dev/null > $NAME_FILE

cat /dev/null > $TOTAL_TYPES_FILE

cat /dev/null > $TOTAL_OUTFILE;

}


#list all files and stat file cnts

function list_all_files()

{

for file in ` ls $1 | sort`

do

if [ -d $1"/"$file ]

then


file_cnt=`ls $1"/"$file | wc -l`

echo $1"/"$file $file_cnt >> $CNT_FILE

list_all_files $1"/"$file

else

echo $1"/"$file >> $NAME_FILE

fi

done

}


#construct files sort by types

function constrcut_type_files()

{

line_cnt=1;

mkdir ./out_put

cat $CNT_FILE | while read line

do

CNT_NO_FILE=${CNT_FILE}_${line_cnt}

#echo "linecnt="$line_cnt;

echo $line > ./out_put/$CNT_NO_FILE;


#first column of every line

type_name=` awk '{print $1}' ./out_put/$CNT_NO_FILE `

#sencond column of every line, nums for print

type_cnt=` awk '{print $2}' ./out_put/$CNT_NO_FILE `

echo $type_name $type_cnt


#construct files

for((curnum=0;curnum<$type_cnt;curnum++))

{

echo $type_name >> $TOTAL_TYPES_FILE

}

line_cnt=$((line_cnt+1));

done;

rm -rf ./out_put

}


#format types_files

function typefile_format()

{

#bak for source

cp -f $TOTAL_TYPES_FILE $TOTAL_TYPES_BAK_FILE

sed -i 's#./train/##g' $TOTAL_TYPES_FILE;

sed -i 's#C4-Literature#文学#g' $TOTAL_TYPES_FILE; #17

sed -i 's#C5-Education#教育#g' $TOTAL_TYPES_FILE; #18

sed -i 's#C6-Philosophy#哲学#g' $TOTAL_TYPES_FILE; #19

sed -i 's#C15-Energy#能源#g' $TOTAL_TYPES_FILE; #2

sed -i 's#C16-Electronics#电子#g' $TOTAL_TYPES_FILE; #3 1240

sed -i 's#C17-Communication#通讯#g' $TOTAL_TYPES_FILE; #4

sed -i 's#C29-Transport#运输#g' $TOTAL_TYPES_FILE; #7

sed -i 's#C35-Law#法学#g' $TOTAL_TYPES_FILE; #11

sed -i 's#C36-Medical#医学#g' $TOTAL_TYPES_FILE; #12

sed -i 's#C37-Military#军事#g' $TOTAL_TYPES_FILE; #13


#sed -i 's#C3-Art#艺术#g' $TOTAL_TYPES_FILE; #16 763

#sed -i 's#C7-History#历史#g' $TOTAL_TYPES_FILE #20

#sed -i 's#C11-Space#空间#g' $TOTAL_TYPES_FILE; #1

#sed -i 's#C19-Computer#电脑#g' $TOTAL_TYPES_FILE; #5

#sed -i 's#C23-Mine#矿#g' $TOTAL_TYPES_FILE; #6

#sed -i 's#C31-Enviornment#环境#g' $TOTAL_TYPES_FILE; #8

#sed -i 's#C32-Agriculture#农业#g' $TOTAL_TYPES_FILE; #9

#sed -i 's#C34-Economy#经济#g' $TOTAL_TYPES_FILE; #10 1623

#sed -i 's#C38-Politics#政治#g' $TOTAL_TYPES_FILE; #14 1047

#sed -i 's#C39-Sports#体育#g' $TOTAL_TYPES_FILE; #15

}


#GBK2UTF8, ./train changed to utf-8 format

function GBK2UTF8()

{

#for all files in ./train

` find $DIR_NAME -type d -exec mkdir -p utf/{} \; `

` find $DIR_NAME -type f -exec iconv -f GBK -t UTF-8 {} -o utf/{} >/dev/null 2>&1 \; `


rm -rf $DIR_NAME;

mv utf/* ./;

}


#new and "[EndEnd]" at the end of every file

function allfiles_addend()

{

icnt=0;

cat $NAME_FILE | while read line

do

echo "[EndEnd]" >> $line;

icnt=$((icnt+1));

#echo "icnt ="$icnt;

done;

}


#Merage all files together

function merge_all_files()

{

#find $DIR_NAME -type f -exec cat {} \;>all_files_together.txt

icnt=0;

cat $NAME_FILE | while read line

do

cat $line >> $TOTAL_OUTFILE;

icnt=$((icnt+1));

echo "icnt ="$icnt;

done;

}


#executing for use

initialize;

list_all_files $DIR_NAME;

constrcut_type_files;

typefile_format;

GBK2UTF8;

allfiles_addend;

merge_all_files;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

5、小结

1)Shell脚本写的多了也就熟悉了。

2)今天起包括后期,所有工程式的Shell脚本都归档、整理思路,形成《懒人Shell脚本》系列文章。前面已经有一篇:

http://blog.csdn.net/laoyang360/article/details/49834859

3)Shell脚本有明显C、C++语言的痕迹,慢慢过渡。脚本毕竟简练为妙!

4)近期浏览blog也发现了Python在爬虫方面的优势,有时间的话会学习整理。


6、GitHub下载地址:

https://github.com/laoyang360/corpus_process



相关文章
|
2月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
107 1
|
1月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
60 2
6种方法打造出色的Shell脚本
|
25天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
53 1
|
1月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
45 2
|
2月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
51 6
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
79 12
|
2月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
69 2
|
3月前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
3月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
693 2