2016-01-26 2 views
0

У меня есть огромный текстовый файл, который содержит категории, как это:Удалить множественные слова из текстового файла

mango  
mangoes 
orange 
oranges 
cat 
cats 

Я хочу, чтобы удалить эти множественные слова из строки. Так что остается:

mango 
orange 
cat 
+0

проверки слова один за другим. – furas

+1

Регулярные выражения не являются правильным инструментом, чтобы решить, является ли слово множественным или нет. Вы просто хотите отфильтровать слова, которые заканчиваются на '' '? –

+0

да. 's' & 'es' будет хорошо на данный момент – oscaradon

ответ

5

Проблема не хорошо подходит для регулярных выражений (вопрос был помечен Regex на момент написания). Регулярные выражения хороши для сопоставления шаблонов и регулярных языков. Английский язык не является обычным языком (т. Е. Английский язык не является формальным языком, который может быть выражен с помощью регулярных выражений), так как HTML и XML не являются регулярными языками. Форма множественного числа на английском языке на самом деле является хорошим способом продемонстрировать проблему: множественное число car равно cars, но множественное число для bus не является buss, но busses. И точно так же, как вопрос, множественное число для mango не является обычной формой mangos, но mangoes. И что еще хуже, не все существительные, оканчивающиеся в o образуют множественное число путем добавления oes - множественное число от piano является pianos не pianoes .. А как насчет wolf и wife собирается wolves и wives и child собирается children?

Итак, я надеюсь, что вы кончены - вы обязательно столкнетесь с неприятностями.

Вам нужно будет написать список исключений из регулярной формы множественного числа, которая добавит s после единственной формы.

Что вам нужно, это реализовать базовый стволовый (тот, который касается только формы множественного числа). Дополнительную информацию см. По адресу: http://tartarus.org/martin/PorterStemmer/

Как только вы создаете слова, вы можете использовать хеш-набор, чтобы эффективно проверять дубликаты. Один проход над словами, стебель и добавление в набор, если он еще не установлен. Если уже в наборе - удалите слово, так как оно было дубликатом. Единственная проблема заключается в том, что это не гарантирует, что вы удаляете множественную форму. Проблема не очень проста без английского словаря.

Если вам нужна действительно хорошая точность, вам нужно будет использовать словарь английских слов, который отображает единственное число в множественное число.

-1

Если вы просто хотите, чтобы отфильтровать строки, оканчивающиеся s:

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

Это приведет к некорректному удалению некоторых слов, которые заканчиваются на s, которые не являются множественными. Я думаю, 'bus' .. –

+0

ya, я согласен, что существует множество исключений, таких как' bus' и 'children' – Fabricator

Смежные вопросы