读取文本文件时,如何仅获取没有所有标点符号的单词?

时间:2018-08-25 13:30:29

标签: matlab text textscan

文本文件abc.txt是从网上抓来的任意文章。例如,如下所示:

  

他的名字叫“ Donald”,他喜欢汉堡。他于12月11日结婚。

除了以上文章中的各种句点和引号,我只想提取小写和数字的单词。在上述示例中:

  

{他的名字叫唐纳德(Donald),他喜欢汉堡,12月11日,他结婚了}

我的代码如下:

filename = 'abc.txt';
fileID = fopen(filename,'r');
C = textscan(fileID,'%s','delimiter',{',','.',':',';','"','''});
fclose(fileID);
Cstr = C{:};
Cstr = Cstr(~cellfun('isempty',Cstr));

除了所有符号之外,是否有任何简单的代码可以仅提取字母单词和数字?

1 个答案:

答案 0 :(得分:1)

要将某些单词转换为小写字母,必须执行两个步骤。

regexprep将位于字符串开头或后跟句号和空格的单词转换为小写。

regexprep函数中,我们使用以下模式:

(?<=^|\. )([A-Z])

表示:

  • (?<=^|\. )我们要断言,在感兴趣的单词之前,是字符串(^或(|)的开始,后跟句号(.)通过空格找到。这种构造称为向后看
  • ([A-Z])表达式的这一部分匹配并捕获(存储匹配项)大写字母(A-Z)。

正则表达式中的${lower($0)}组件称为动态表达式,并将捕获的组(([A-Z]))的内容替换为小写。此语法特定于MATLAB语言。

您可以检查以上表达式here的行为。


发生小写转换后,regexp将查找所有出现的一个或多个数字,小写字母和大写字母。

模式[a-zA-Z0-9]+匹配小写字母,大写字母和数字。

您可以检查此正则表达式here的行为。

text = fileread('abc.txt')
data = {regexp(regexprep(text,'(?<=^|\. )([A-Z])','${lower($0)}'),'[a-zA-Z0-9]+','match')'}

>>data{1}

13×1 cell array

    {'his'     }
    {'name'    }
    {'is'      }
    {'Donald'  }
    {'and'     }
    {'he'      }
    {'likes'   }
    {'burger'  }
    {'on'      }
    {'December'}
    {'11'      }
    {'he'      }
    {'married' }