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

How can I obtain only word without All Punctuation Marks when I read text file?

文本文件 abc.txt 是从网上抓取的任意文章。例如:

His name is "Donald" and he likes burger. On December 11, he married.

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

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

我的代码如下:

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

有没有简单的代码可以只提取除所有符号外的字母单词和数字?

要将某些单词转换为小写,需要两个步骤。

regexprep 将字符串开头或句点和空格后面的单词转换为小写。

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

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

表示:

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

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

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


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

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

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

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

>>data{1}

13×1 cell array

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