jsongwen 发表于 2008-1-4 10:43

求查阅单词/文本分词的程序

一个文本文件仅含有英文字母和分隔符,分隔符包括空格、逗号、句号和换行符。除此之外,该文件不含其它符号。一个单词是由一个或多个分隔符分隔的连续字母序列,例如:符号“_”为空格符;“↓”为换行符;“ . ”为句号。文本文件中的第一个句子是从文件头到第一个句号间的字符序列(含句号), 除第一个句子之外的所有句子都是由两个句号间的所有字符组成的序列(含后面的句号)。编一程序,由键盘输入一个符合上述约定的文本文件名和一个单词,计算该单词在该文件中出现的次数,并输出包含该单词的所有句子(按句子在文件中的先后次序,依次输出)。
◆注意:
①文件中每个单词长度不超过20个字母。
②判断单词是否相同时不区分大小写。例如ABC、Abc、ABc、aBC、abc…都是同一个单词。
◆输入数据:
由键盘输入待查文本文件名和待查单词。待查文件名为:input.txt。
◆输出数据:
输出文件为output.txt,该文件第一行为该单词在文件中出现的次数。
从每二行开始是依先后次序输出的包含该单词的句子。
在输出句子时请注意:
①每个句子无论多长只占一行;
②原句中每一个换行符用一个空格符代替。



不知道这个怎么用Matlab实现……

sogooda 发表于 2008-1-4 16:45

这个问题有点儿繁,用正则表达式应该是最合适了。
搜索下版面 “正则表达式”

doc regexpi

log1 发表于 2008-1-4 20:47

学习中

sogooda 发表于 2008-1-5 15:44

今天有点儿时间,就写了个小函数,lz测试测试吧,不行再改改。水平有限,所以写的有点儿繁,中间的循环应该还可以简化。


function fenci(iFile,oFile,pstr)
try
    fid=fopen(iFile);
    C=textscan(fid,'%s ');
    fclose(fid);
    T='';
    for i=1:length(C{1,1})
      T=;
    end
    m1=regexpi(T,'\.','start');
    s{1,:}=T(1:m1(1));
    for i=1:length(m1)-1;
      s{i+1,:}=T(m1(i)+1:m1(i+1));
    end
    cc=regexpi(T,pstr,'start');
    count=length(cc);
    r=regexpi(s,pstr,'start');
    fido=fopen(oFile,'w');
    fprintf(fido,'%g\n',count);
    for i=1:length(r)
      if ~isempty(r{i,1})
            fprintf(fido,'%s\n',s{i,1});
      end
    end
    fclose(fido);
    disp( )
    disp('Finished!')
catch
    error('Unkonwn Error');
end


testscrpit

clear
clc
iFile='input2.txt';
oFile='output2.txt';
pstr='house';
fenci(iFile,oFile,pstr)

猪头肉 发表于 2010-11-26 16:31

{:{39}:}好像不太懂,命令好陌生

猪头肉 发表于 2010-11-26 16:32

regexpi怎么用,求解
页: [1]
查看完整版本: 求查阅单词/文本分词的程序