关于多语篇语料切分成单独TXT

#1
我想要把一个从Lexis下载下来的大文本(包含一定时间段内的相关新闻,约500篇)切分成单独新闻文本,就是500个单独的TXT,请问有什么软件或者方法吗?我试过用PowerGREP编写正则,但是没编出来。。。
 

李亮1975重庆

语料库快乐军政委
#2
WordSmith也有类似功能

如果你是想从一个文本文件中“剥离出”内含的每篇新闻就需要根据这些新闻的起点与终点的文本特征来制定编程办法或选择现有工具或录制修改自定义的Office Word宏,而WordSmith也有类似功能
http://www.lexically.net/downloads/version6/HTML/index.html?splitter_index.htm
但,如果每篇新闻的前后没“区别性文本字符串特征”就几乎没全自动的办法了,就只能半自动了。
 
#5
回复: 关于多语篇语料切分成单独TXT

WordSmith不是要付费嘛,所以没有下载到。听说用PowerGrep编写好正则就可以提取起点与终点的信息,就是你说的第一种方法。不过试了好多,都没办法完美切割。后来在网上找着了一个可以用正则表达式的文本切割器,以document题头为切割点分割文本,完全没有问题,就是不能切太大的文件,好像1m以下可以。
http://www.onlinedown.net/soft/73381.htm
 
#6
回复: WordSmith也有类似功能

如果你是想从一个文本文件中“剥离出”内含的每篇新闻就需要根据这些新闻的起点与终点的文本特征来制定编程办法或选择现有工具或录制修改自定义的Office Word宏,而WordSmith也有类似功能
http://www.lexically.net/downloads/version6/HTML/index.html?splitter_index.htm
但,如果每篇新闻的前后没“区别性文本字符串特征”就几乎没全自动的办法了,就只能半自动了。
你说的office编写宏怎么弄呀?能简单介绍一下么?谢谢!
 
#8
回复: 关于多语篇语料切分成单独TXT

7 of 500 DOCUMENTS



Süddeutsche Zeitung (inkl. Regionalausgaben)

Samstag 30. November 2013

Frischzellenkur;
Totgesagte leben l?nger:

AUTOR: VON JOACHIM BECKER

RUBRIK: Mobiles Leben; München; Bayern; Deutschland; S. 42

L?NGE: 1525 W?rter


Zeit für einen ?lwechsel: Die Menschheit brauche eine Alternative zu fossilen
Kraftstoffen ......... - aber immer noch mehr als bei
.......
.........
Batteriefahrzeugen, die bei Minusgraden kaum Energie liefern. Die Zeit spielt
also für den Brennstoffzellenantrieb: Die Ernüchterung nach der
Batterie-Euphorie kommt bestimmt - genau wie die n?chste ?lkrise.


UPDATE: 30. November 2013

SPRACHE: GERMAN; DEUTSCH

GRAFIK: Nullemissionsfahrzeug:

PUBLICATION-TYPE: Zeitung

ZEITUNGS-CODE: SZ


Copyright 2013 Süddeutsche Zeitung GmbH
Alle Rechte vorbehalten

我其实只需要中间标了颜色的正文内容。麻烦老师了!
 

李亮1975重庆

语料库快乐军政委
#9
看了你提供的德语或法语样本

貌似你需要提取的部分都是以“UPDATE: ”为结束标志,而且貌似是以“L?NGE: 1525 W?rter”为开始标志,但,“L?NGE: 1525 W?rter”这是什么意思,每篇文章在这里都不一样吧?甚至有些文章的开头没有“L?NGE: 1525 W?rter”吧?
 
#10
回复: 关于多语篇语料切分成单独TXT

是的,我就是想以这两个词为起点和终点来提取文本,第一个是长度的意思,1525个词;每篇新闻开头都有这两个词的,属于元信息部分。
 

李亮1975重庆

语料库快乐军政委
#11
基于单文件的多文本提取器.exe

我针对你的任务需求,做了个小程序,编程语言是AutoIt,已经上传到本帖的附件。
软件无需安装,解压缩到一个专门的独立的文件夹,然后再双击运行就可以了。但,千万不要直接双击你下载的压缩包,然后再直接双击里面的小程序,因为这样就导致解压缩到C盘的临时文件夹去了,就没法看到提取出来的一系列文本文件了。

程序运行起来,就首先弹出“文件选择对话框”让你选择要处理的TXT文件,然后就弹出“开始字符串的输入对话框”,你输入并点确定按钮,然后就弹出“结束字符串的输入对话框”,你输入并点确定按钮,就开始自动提取了。提取结果就是1.txt、2.txt、3.txt、……这些都产生在小程序所在的文件夹。

本程序只适合你目前描述的文本提取需求,提取的时候是从“开始字符串”所在行的下一行开始,然后结束于“下一个结束字符串”的所在行的前一行。

我的小程序应该是干净无毒的,下面链接是杀毒软件的扫描报告:
http://www.virscan.org/scan/9d546a6f75db20e229bd06d8e34ec913
在使用39款杀毒软件引擎进行在线扫描之后,只有2款国外的不著名的杀毒软件认为含病毒

如果你自己操作有任何障碍,你就直接上传你的那个文本文件到附件,我处理了上传和回帖给你,因为你也许遇到我的程序没法运行在你的64位操作系统或我的程序被识别为病毒之类的情况,就不折腾了。如果你有兴趣看源代码,下面就是……

代码:
$message="请选择要处理的文本文件(本程序是李亮开发)"
Local $filepath1 = FileOpenDialog($message, ".", "Text (*.txt)", 1)
$file1=FileOpen($filepath1, 0)
$copy=0
$head=InputBox("开始字符串", "可以输入一个连续词组,提取从开始字符串所在的下一行开始")
$tail=InputBox("结束字符串", "可以输入一个连续词组,提取从结束字符串所在的前一行结束")
$file_number=0
$file_size=FileGetSize($filepath1)
While 1
    Local $line = FileReadLine($file1)
    $tmp=StringStripWS($line, 1)
    If StringInStr($tmp, $head)=1 Then $copy=$copy+1
    If StringInStr($tmp, $head)=0 AND $copy>0 Then $copy=$copy+1
    If $copy=1 Then
      $file_number=$file_number+1
      If $file_number>1 Then FileClose($file2)
      $file2=FileOpen("c:/" & string($file_number) & ".txt", 130)
      EndIf
    If StringInStr($tmp, $tail)=1 Then $copy=0
    If FileGetPos($file1)>$file_size-1 Then ExitLoop
    If $copy>1 Then FileWriteLine($file2, $line)
    ;MsgBox(4096, $copy, $line)
    WEnd
FileClose($file1)
MsgBox(4096, "提取完毕", "请检查本程序所在文件夹,已经产生的1.txt、2.txt、……等文件")
 

附件

李亮1975重庆

语料库快乐军政委
#12
基于单文件的多文本提取器.exe的提取适用范围

例如我们有下面的文本内容……
I am good.
myhead
Dogs are fierce.
mytail
I am angry.
myhead
Cats are tender.
mytail
Something happend.

上面的内容,如果是把“myhead”作为开始字符串,并且把“mytail”作为结束字符串,那么,就会产生出1.txt和2.txt两个新文件是提取的文章内容。
1.txt的内容是“Dogs are fierce.”
2.txt的内容是“Cats are tender.”
如果“myhead”和“mytail”的左侧有若干个空格或制表符,本软件也能自动剔除而识别到。

其他朋友,如果觉得本程序能用来做自己面临的语料处理任务,也欢迎使用。
 
#14
回复: 基于单文件的多文本提取器.exe

我针对你的任务需求,做了个小程序,编程语言是AutoIt,已经上传到本帖的附件。
软件无需安装,解压缩到一个专门的独立的文件夹,然后再双击运行就可以了。但,千万不要直接双击你下载的压缩包,然后再直接双击里面的小程序,因为这样就导致解压缩到C盘的临时文件夹去了,就没法看到提取出来的一系列文本文件了。

程序运行起来,就首先弹出“文件选择对话框”让你选择要处理的TXT文件,然后就弹出“开始字符串的输入对话框”,你输入并点确定按钮,然后就弹出“结束字符串的输入对话框”,你输入并点确定按钮,就开始自动提取了。提取结果就是1.txt、2.txt、3.txt、……这些都产生在小程序所在的文件夹。

本程序只适合你目前描述的文本提取需求,提取的时候是从“开始字符串”所在行的下一行开始,然后结束于“下一个结束字符串”的所在行的前一行。

我的小程序应该是干净无毒的,下面链接是杀毒软件的扫描报告:
http://www.virscan.org/scan/9d546a6f75db20e229bd06d8e34ec913
在使用39款杀毒软件引擎进行在线扫描之后,只有2款国外的不著名的杀毒软件认为含病毒

如果你自己操作有任何障碍,你就直接上传你的那个文本文件到附件,我处理了上传和回帖给你,因为你也许遇到我的程序没法运行在你的64位操作系统或我的程序被识别为病毒之类的情况,就不折腾了。如果你有兴趣看源代码,下面就是……

代码:
$message="请选择要处理的文本文件(本程序是李亮开发)"
Local $filepath1 = FileOpenDialog($message, ".", "Text (*.txt)", 1)
$file1=FileOpen($filepath1, 0)
$copy=0
$head=InputBox("开始字符串", "可以输入一个连续词组,提取从开始字符串所在的下一行开始")
$tail=InputBox("结束字符串", "可以输入一个连续词组,提取从结束字符串所在的前一行结束")
$file_number=0
$file_size=FileGetSize($filepath1)
While 1
    Local $line = FileReadLine($file1)
    $tmp=StringStripWS($line, 1)
    If StringInStr($tmp, $head)=1 Then $copy=$copy+1
    If StringInStr($tmp, $head)=0 AND $copy>0 Then $copy=$copy+1
    If $copy=1 Then
      $file_number=$file_number+1
      If $file_number>1 Then FileClose($file2)
      $file2=FileOpen("c:/" & string($file_number) & ".txt", 130)
      EndIf
    If StringInStr($tmp, $tail)=1 Then $copy=0
    If FileGetPos($file1)>$file_size-1 Then ExitLoop
    If $copy>1 Then FileWriteLine($file2, $line)
    ;MsgBox(4096, $copy, $line)
    WEnd
FileClose($file1)
MsgBox(4096, "提取完毕", "请检查本程序所在文件夹,已经产生的1.txt、2.txt、……等文件")
果然是大神,好厉害!!!之前去开会了现在才看到,不过还是感谢感谢!!!
我立马下载下来试了一下,不过果然找不到切割后的文件。。。我把压缩文件直接解压成单独文件夹,词目也输入了,就是切完后的文件不知道去哪了,我找了C盘临时文件夹也木有。。。~~~~(>_<)~~~~ 果然还是太笨了。。。
我这边有一大批文本,几十个呢,就不好意思麻烦您了,还是自己学会方法操作,请大神继续赐教!!
 

李亮1975重庆

语料库快乐军政委
#15
回复: 基于单文件的多文本提取器.exe

果然是大神,好厉害!!!之前去开会了现在才看到,不过还是感谢感谢!!!
我立马下载下来试了一下,不过果然找不到切割后的文件。。。我把压缩文件直接解压成单独文件夹,词目也输入了,就是切完后的文件不知道去哪了,我找了C盘临时文件夹也木有。。。~~~~(>_<)~~~~ 果然还是太笨了。。。
我这边有一大批文本,几十个呢,就不好意思麻烦您了,还是自己学会方法操作,请大神继续赐教!!
没法赐教,我想不出你的操作故障在哪里,其实,也能想到很多可能性,但,都逐一解释和逐一提出解决方案要费很多时间和文字。
 
顶部