从文本文件中删除多个单词

时间:2016-01-26 06:58:59

标签: python regex

我有一个巨大的文本文件,其中包含类似的内容:

mango    
mangoes   
orange   
oranges   
cat   
cats   

我想删除这些复数字。所以它仍然存在:

mango   
orange   
cat   

2 个答案:

答案 0 :(得分:6)

这个问题不适合正则表达式(在撰写本文时,问题标记为正则表达式)。正则表达式适用于匹配模式和常规语言。 英语不是常规语言(也就是说,英语不是可以使用正则表达式表达的正式语言),就像HTML和XML不是常规语言一样。英语中的复数形式实际上是证明问题的好方法:car的复数是cars,但bus的复数不是buss而是busses。正如问题所示,mango的复数形式不是常规形式mangos,而是mangoes。更糟糕的是,并非所有以o结尾的名词都会通过添加oes形成复数形式 - piano的复数形式为pianos而非pianoes .. wolfwife前往wolveswives以及child前往children怎么办?

所以我希望你被定罪 - 你一定会遇到麻烦。

您必须在常规复数形式中写出一些例外列表,在单数形式之后添加s

您需要的是实现一个基本的词干分析器(仅涉及复数形式)。如需进一步阅读,请参阅:http://tartarus.org/martin/PorterStemmer/

一旦你干了字,就可以使用哈希集来有效地检查重复项。单个传递单词,词干并添加到设置(如果尚未在集合中)。如果已经在集合中 - 删除单词,因为它是重复的。唯一的问题是这不能保证您删除复数形式。没有英文字典,问题就不容易了。

如果你想要非常好的准确性,你需要使用将单数形式复数形式的英语单词词典。

答案 1 :(得分:-1)

如果您只想过滤掉以s结尾的行:

grep -P '[^s]$' file.txt > newfile.txt