извлечь (из текста) только неповторяющиеся слова, используя только регулярное выражение через терминал оболочки - PullRequest
1 голос
/ 25 октября 2019

Я просто хочу извлечь слова, которые не повторяются в тексте ниже. Я просто хочу использовать регулярное выражение, и я видел некоторые похожие вопросы, как в Извлекать только те слова из списка, которые не содержат повторяющихся букв, используя регулярные выражения (не повторять буквы) и Регулярное выражение: строка соответствия, содержащая только неповторяющиеся слова . Я хотел бы, чтобы результатом стал список слов, которые не повторяются, появляющихся в естественном порядке, в котором они встречаются в тексте.

Мой текст в общем формате:

ОбучениеПсихология является частью педагогической психологии, которая относится к школьному образованию. Как будет видно позже, оба имеют одну и ту же цель: изучать, объяснять и понимать процессы изменения поведения, которые вырабатываются у людей в результате их участия в образовательных мероприятиях. Что придает сущности, соответствующей преподаванию психологии, характер и характер? характеристики образовательной деятельности, которые существуют на основе изученного изменения поведения.

Мой текст в вертикальном списке слово в слово отдельно (если это проще сделать, используя это), используя ответ на этот вопрос

1 Ответ

1 голос
/ 25 октября 2019

Если вам нужно чистое решение регулярных выражений, вы можете сделать это только с регулярным выражением .NET или Python PyPi, потому что вам нужны две вещи, которые обычно не предоставляются библиотеками регулярных выражений: 1) разбор строки ввода справа налево и 2) бесконечная ширинаlookbehind.

Вот решение Python:

import regex
text="Teaching psychology is the part of educational psychology that refers to school education. As will be seen later, both have the same objective: to study, explain and understand the processes of behavioral change that are produce in people as a consequence of their participation in activities educational What gives an entity proper to teaching psychology is the nature and the characteristics of the educational activities that exist at the base of the of behavioral change studied."
rx = r'(?rus)(?<!\b\1\b.*?)\b(\w+)\b'
print (list(reversed(regex.findall(rx, text))))

См. онлайн-демонстрацию .

Подробности

  • (?rus) - r включает синтаксический анализ входных строк справа налево (все шаблоны в регулярном выражении соответствуют слева направо, как обычно, поэтому тексты совпадений не инвертируются), u в Python2 используется, чтобы \w знал о Юникоде, это опция по умолчанию в Python 3, s - это модификатор DOTALL, делающий . разрывы строк совпадений
  • (?<!\b\1\b.*?) - нет совпадения, если непосредственно кСлева от текущего местоположения есть любые 0+ символов, а затем тот же текст, что и в группе 1 (см. далее в выражении), как целое слово
  • \b(\w+)\b - целое слово, 1+ словосимволы в границах слова.

reversed is используется для печати слов в исходном порядке, поскольку регулярное выражение справа налево сопоставляет их от конца к началу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...