语料处理:文本位置大挪移

xudekuan

Moderator
如何把下列语料进行处理:

Aa01A01= 人 士 人物 人士 人氏 人选
Aa01A02= 人类 生人 全人类
Aa01A03= 人手 人员 人口 人丁 口 食指
Aa01A04= 劳力 劳动力 工作者
Aa01A05= 匹夫 个人
Aa01A06= 家伙 东西 货色 厮 崽子 兔崽子 狗崽子 小子 杂种 畜生 混蛋 王八蛋 竖子 鼠辈 小崽子
Aa01A07= 者 手 匠 客 主 子 家 夫 翁 汉 员 分子 鬼 货 棍 徒
Aa01A08= 每人 各人 每位
Aa01A09= 该人 此人


处理成:
人 Aa01A01=
士 Aa01A01=
人物 Aa01A01=
人士 Aa01A01=
人氏 Aa01A01=
人选 Aa01A01=

等等.
也就是说,前面的是分类,后面的是词语,变成,前面是词语,后面是分类,每一个词语一个分类。

有没有简便的方法?

[本贴已被 xujiajin 于 2006年07月24日 16时19分55秒 编辑过]
 
我不会编程,所以只能想到一个笨办法:但肯定可行。
在Word里
1、把所有的=替换为tab
2、然后以tab为基准将所有文字转换为两列的表格。
3、在右侧再加上一列。
4、把第一列选中用鼠标整体拖到新建的第三列就OK了。
 
首先谢谢家金。我想可能问题没有讲清楚:

前面的是分类,后面的是词语,每类又很多词语,但是数目不定,比如,第一类(第一列)又六个词语,第二类(第二列)有三个词语,等等


变成,前面是词语,后面是分类,每一个词语一个分类。
 
我应该没有理解错误,你最后要的结果不就是两列吗?
第一列是分类代码;
第二列是词语,多少个都没问题。
 
这是按你的说法得出的结果:
人 士 人物 人士 人氏 人选 Aa01A01
人类 生人 全人类 Aa01A02
人手 人员 人口 人丁 口 食指 Aa01A03
劳力 劳动力 工作者 Aa01A04
匹夫 个人 Aa01A05
家伙 东西 货色 厮 崽子 兔崽子 狗崽子 小子 杂种 畜生 混蛋 王八蛋 竖子 鼠辈 小崽子 Aa01A06
者 手 匠 客 主 子 家 夫 翁 汉 员 分子 鬼 货 棍 徒 Aa01A07
每人 各人 每位 Aa01A08
该人 此人 Aa01A09

我想要的是:
人 Aa01A01=
士 Aa01A01=
人物 Aa01A01=
人士 Aa01A01=
人氏 Aa01A01=
人选 Aa01A01=
 
17817个分类,是哈工大同义词次林电子版,
http://www.ir-lab.org/
由他们免费提供的,在此对他们表示感谢。
各位如果有兴趣,可以到上面去看看。

我想,把每个词语的语义类别通过上面的词典(它们词典的格式入上,一个分类,后接若干词语)作出来(用人工太慢,有5、6万词条。),这样可能对于语料库研究或许有帮助。

[本贴已被 作者 于 2006年07月24日 22时32分19秒 编辑过]
 
回复:语料处理:文本位置大挪移

最近在学Perl编程,这个问题看起来不是很难,我写了个小程序,希望可以帮助你解决问题

使用说明:

1. 本程序使用Perl语言写成,作者艾海洋;
2. 为方便大家使用,本程序已编译为可执行文件;对源代码感兴趣的C友可与我联系索取;
3. 请将您需要处理的文件保存为 text_input.txt,与本程序保存在同一个文件夹下;
4. 双击 perl_solution.exe,程序在同一目录下生成 text_output.txt 文件,即是所需结果。

http://forum.corpus4u.org/upload/forum/2006072423374485.rar
 
好用,谢谢Ocean。部分结果如下:
人 Aa01A01=
士 Aa01A01=
人物 Aa01A01=
人士 Aa01A01=
人氏 Aa01A01=
人选 Aa01A01=
人类 Aa01A02=
生人 Aa01A02=
全人类 Aa01A02=
人手 Aa01A03=
人员 Aa01A03=
人口 Aa01A03=
人丁 Aa01A03=
口 Aa01A03=
食指 Aa01A03=
劳力 Aa01A04=
劳动力 Aa01A04=
工作者 Aa01A04=
匹夫 Aa01A05=
个人 Aa01A05=
家伙 Aa01A06=
东西 Aa01A06=
货色 Aa01A06=
厮 Aa01A06=
崽子 Aa01A06=
兔崽子 Aa01A06=
狗崽子 Aa01A06=
小子 Aa01A06=
杂种 Aa01A06=
畜生 Aa01A06=
混蛋 Aa01A06=
王八蛋 Aa01A06=
竖子 Aa01A06=
鼠辈 Aa01A06=
小崽子 Aa01A06=
者 Aa01A07=
手 Aa01A07=
匠 Aa01A07=
客 Aa01A07=
主 Aa01A07=
子 Aa01A07=
家 Aa01A07=
夫 Aa01A07=
翁 Aa01A07=
汉 Aa01A07=
员 Aa01A07=
分子 Aa01A07=
鬼 Aa01A07=
货 Aa01A07=
棍 Aa01A07=
徒 Aa01A07=
每人 Aa01A08=
各人 Aa01A08=
每位 Aa01A08=
该人 Aa01A09=
此人 Aa01A09=
 
真的很好用,并且处理速度非常快,非常感谢海洋站长。如果方便,能否把您的设计思路教给大家,好学习学习。
再次感谢!
 
回复:语料处理:文本位置大挪移

以下是引用xudekuan 在2006-7-25 9:00:57的发言:
真的很好用,并且处理速度非常快,非常感谢海洋站长。如果方便,能否把您的设计思路教给大家,好学习学习。
再次感谢!


能否把您的设计思路教给大家,好学习学习。
 
代码请看贴图:

头两句话的意思是打开源文件,创建目标文件;
末尾两句话是关闭这两个文件;

中间的8行就是进行处理的两个循环,while循环依次读取源文件的每一行
@ line = split (); 是将每一行按照空格拆分开来,保存到数组@line里面
my $category = $line [0] 是将数组的第一个元素取出来,放到变量$category中去,即分类标识
shift @line 是将去掉@line数组中的分类标识
foreach $word ( @line ) 是将经过上一句处理的数组的每一个元素那出来,放到$word变量中去;
然后将每个元素输出到目标文件中去,注意在后面加入空格和$category标识 print OUT "$word $category";
这样foreach循环一次,每一行的同义词都转换了,while进入下一行的循环,直到文件末尾,就这样,计算机可以很快就处理万整个文件。



2006072600044125.jpg



[本贴已被 作者 于 2006年07月26日 00时05分13秒 编辑过]
 
看来perl真是功能强大。应该好好学习。
另外,有一个句字级对齐的语料库,放在一个文件里,一行英文,下面是对应的一行中文,如果把英文和中文分别存成两个文件,变成两个对齐的语料库,是否好处理?谢谢!
 
原文格式如下:
A science fiction cannot not be regarded as a mere entertainment, but in fact it tells the reader much more.
科幻小说不能简单地看成是供消遣的,而实际上它给读者展示更深刻的内容。
A sweet temper is a figurative expression, but sweet coffee is not.
甜蜜的性情是个比喻的说法,而甜咖啡则不是。
According the Law of Labour, bosses can't fire workers at will any longer.
"根据劳动法,老板们再也不可以任意解雇工人了。"
According to the law, a young man should enlist when he is18.
 
回复:语料处理:文本位置大挪移

用ICON语言写了一个软件
1. 本程序使用ICON语言写成作者徐德宽
2. 为方便大家使用,本程序已编译为可执行文件;源代码附后;
3. 下载软件,将其解压到一个文件夹,请将您需要处理的文件保存为 input.txt,与本程序保存在同一个文件夹下;
4. 双击 双语语料库分离软件.exe,程序在同一目录下生成 output1.txt和output2.txt 文件,分别是两种语言的文件。


http://forum.corpus4u.org/upload/forum/2006072612103870.rar


[本贴已被 作者 于 2006年07月26日 12时16分53秒 编辑过]
 
源代码:
procedure main ()
i:=1 #控制变量
fin:=open ("input.txt","r") #建立输入文件
fou1:=open ("output1.txt","a") #建立输出文件1
fou2:=open ("output2.txt","a") #建立输出文件2

while l1:=read(fin) do #从输入文件读入一行
{
if i%2=1 then #判断是否是奇数行, %为求余数的运算符,第一次读入为奇数次,是则,。
write (fou1, l1) #写一行到输出文件1
else #否则
write (fou2, l1) #写一行到输出文件2
i:=i+1} #循环变量加1

end
 
Back
顶部