如何把预处理(分词、去停用词)之后的语料库合成一个大文档(dat文件),最后是批处理
答案:1 悬赏:60 手机版
解决时间 2021-02-15 22:29
- 提问者网友:心如荒岛囚我终老
- 2021-02-15 02:18
如何把预处理(分词、去停用词)之后的语料库合成一个大文档(dat文件),最后是批处理
最佳答案
- 五星知识达人网友:几近狂妄
- 2021-02-15 03:32
M,固定的,是吗?
documenti,中的i,是txt的文件名吗?
txt中的内容都是一行吗?
能提供几个文件测试吗,放到百度网盘即可。
--
文件放置位置:(语料库文件在list文件夹中)
测试文件的内容:
1.bat代码如下:
@echo off
setlocal ENABLEDELAYEDEXPANSION
rem p变量为语料库文件所在的目录
set "p=.list"
set "tmp="
set "result="
>>.esult.dat echo [M]
cd %p%
for /f %%i in ('dir /a-d /b') do (
call:fun_m %%i tmp
set "result=[document%%~ni]=!tmp!"
echo !result!
>>..esult.dat echo !result!
set "tmp="
)
pause
goto:eof
:: ///////////////////////////////////////////
:fun_m
set "str="
set "strstr="
for /f "delims=" %%i in (%1) do (
call:fun_clear
call:fun "%%i"
)
set /a n=0
:fun_m_loop
set /a n+=1
set str=[!#str%n%!]
if "!str!" equ "[]" (goto:a)
set strstr=!strstr! !str!
goto:fun_m_loop
:a
set "%2=%strstr%"
goto:eof
:: ///////////////////////////////////////////
:fun_clear
set /a n=0
:fun_clear_loop
set /a n+=1
if "!#str%n%!" equ "" (goto:eof)
set "#str!n!="
goto:fun_clear_loop
goto:eof
:: ///////////////////////////////////////////
:fun
set str=%1
set str=%str:"=%
set n=0
for %%j in (%str%) do (
set /a n+=1
set #str!n!=%%j
)
goto:eof
结果如下:
批处理所在目录会生成result.dat文件
result.dat内容如下:
[M]
[document1]= [30] [29] [28] [27] [26] [25] [24] [23] [22] [21] [20] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4] [3] [2] [1]
[document2]= [30] [29] [28] [27] [26] [25] [24] [23] [22] [21] [20] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4] [3] [2] [1]
[document3]= [数字地球] [信息技术] [信息资源] [空间数据] [地球] [信息] [数据] [处理] [数字] [体系] [人们] [全球] [技术]
[document4]= [数字地球] [信息技术] [信息资源] [空间数据] [地球] [信息] [数据] [处理] [数字] [体系] [人们] [全球] [技术]
[document5]= [数字地球] [信息技术] [信息资源] [空间数据] [地球] [信息] [数据] [处理] [数字] [体系] [人们] [全球] [技术]批处理对话框:
追问如你list文件夹里的文本,我希望显示的结果是这样的效果,第一行的M是list文件夹里的文本个数,第二行往下就是一个文本的内容,result.dat里的一行(除第一行)代表一个文本,如下图
追答。。。你是说不需要那些格式了?你耍我呢?
追问没有呀,我上面那种格式的[docment]的[]不需要保留的,你做的基本是对的,把中括号和每一行的[docmenti]=去掉就应该对了
而且我用1.bat执行的结果是这样的
追答能给990-999.txt这几文件测试吗? 百度网盘。问个问题,关键字两遍的中括号还要吗?追问不需要中括号的,想下面这样的格式
追答好的,你那文件都是utf8-bom格式编码,用bat处理有bug。
等我吃完饭,给你写个vbs。
--
分能给多点吗追问我没有多少分吧,能加QQ聊不,我现在恢复一次要5财富值,814726225追答Dim WshShell
Dim fso, f, f1, fc
Dim count
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
folderspec = WshShell.CurrentDirectory & "list"
Set f = fso.GetFolder(folderspec)
Set fc = f.Files
For Each f1 in fc
fun f1
count = count + 1
Next
Set fin = fso.OpenTextFile("tmp.dat", ForReading, True)
Set fout = fso.OpenTextFile("result.dat", ForAppending, True)
fout.WriteLine count
fout.WriteLine fin.readall
fin.Close
fout.Close
fso.DeleteFile("tmp.dat")
'///////////////////////////////////////////////////
Function fun (filename)
set stm2=createobject("ADODB.Stream")
stm2.Charset ="utf-8"
stm2.Open
stm2.LoadFromFile filename
readfile = stm2.ReadText
funWrite readfile
stm2.Close
set Stm2 = nothing
End Function
Function funWrite (filetext)
Set f = fso.OpenTextFile("tmp.dat", ForAppending, True)
f.WriteLine filetext
f.Close
End Function
documenti,中的i,是txt的文件名吗?
txt中的内容都是一行吗?
能提供几个文件测试吗,放到百度网盘即可。
--
文件放置位置:(语料库文件在list文件夹中)
测试文件的内容:
1.bat代码如下:
@echo off
setlocal ENABLEDELAYEDEXPANSION
rem p变量为语料库文件所在的目录
set "p=.list"
set "tmp="
set "result="
>>.esult.dat echo [M]
cd %p%
for /f %%i in ('dir /a-d /b') do (
call:fun_m %%i tmp
set "result=[document%%~ni]=!tmp!"
echo !result!
>>..esult.dat echo !result!
set "tmp="
)
pause
goto:eof
:: ///////////////////////////////////////////
:fun_m
set "str="
set "strstr="
for /f "delims=" %%i in (%1) do (
call:fun_clear
call:fun "%%i"
)
set /a n=0
:fun_m_loop
set /a n+=1
set str=[!#str%n%!]
if "!str!" equ "[]" (goto:a)
set strstr=!strstr! !str!
goto:fun_m_loop
:a
set "%2=%strstr%"
goto:eof
:: ///////////////////////////////////////////
:fun_clear
set /a n=0
:fun_clear_loop
set /a n+=1
if "!#str%n%!" equ "" (goto:eof)
set "#str!n!="
goto:fun_clear_loop
goto:eof
:: ///////////////////////////////////////////
:fun
set str=%1
set str=%str:"=%
set n=0
for %%j in (%str%) do (
set /a n+=1
set #str!n!=%%j
)
goto:eof
结果如下:
批处理所在目录会生成result.dat文件
result.dat内容如下:
[M]
[document1]= [30] [29] [28] [27] [26] [25] [24] [23] [22] [21] [20] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4] [3] [2] [1]
[document2]= [30] [29] [28] [27] [26] [25] [24] [23] [22] [21] [20] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10] [9] [8] [7] [6] [5] [4] [3] [2] [1]
[document3]= [数字地球] [信息技术] [信息资源] [空间数据] [地球] [信息] [数据] [处理] [数字] [体系] [人们] [全球] [技术]
[document4]= [数字地球] [信息技术] [信息资源] [空间数据] [地球] [信息] [数据] [处理] [数字] [体系] [人们] [全球] [技术]
[document5]= [数字地球] [信息技术] [信息资源] [空间数据] [地球] [信息] [数据] [处理] [数字] [体系] [人们] [全球] [技术]批处理对话框:
追问如你list文件夹里的文本,我希望显示的结果是这样的效果,第一行的M是list文件夹里的文本个数,第二行往下就是一个文本的内容,result.dat里的一行(除第一行)代表一个文本,如下图
追答。。。你是说不需要那些格式了?你耍我呢?
追问没有呀,我上面那种格式的[docment]的[]不需要保留的,你做的基本是对的,把中括号和每一行的[docmenti]=去掉就应该对了
而且我用1.bat执行的结果是这样的
追答能给990-999.txt这几文件测试吗? 百度网盘。问个问题,关键字两遍的中括号还要吗?追问不需要中括号的,想下面这样的格式
追答好的,你那文件都是utf8-bom格式编码,用bat处理有bug。
等我吃完饭,给你写个vbs。
--
分能给多点吗追问我没有多少分吧,能加QQ聊不,我现在恢复一次要5财富值,814726225追答Dim WshShell
Dim fso, f, f1, fc
Dim count
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
folderspec = WshShell.CurrentDirectory & "list"
Set f = fso.GetFolder(folderspec)
Set fc = f.Files
For Each f1 in fc
fun f1
count = count + 1
Next
Set fin = fso.OpenTextFile("tmp.dat", ForReading, True)
Set fout = fso.OpenTextFile("result.dat", ForAppending, True)
fout.WriteLine count
fout.WriteLine fin.readall
fin.Close
fout.Close
fso.DeleteFile("tmp.dat")
'///////////////////////////////////////////////////
Function fun (filename)
set stm2=createobject("ADODB.Stream")
stm2.Charset ="utf-8"
stm2.Open
stm2.LoadFromFile filename
readfile = stm2.ReadText
funWrite readfile
stm2.Close
set Stm2 = nothing
End Function
Function funWrite (filetext)
Set f = fso.OpenTextFile("tmp.dat", ForAppending, True)
f.WriteLine filetext
f.Close
End Function
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯