Учитывая любой документ, я хочу иметь возможность генерировать NFA, который принимает только те слова, которые присутствуют в документе. В принципе, я хочу написать функцию, которая может динамически генерировать NFA из любого документа. Есть ли уже существующие алгоритмы, которые уже делают это?Учитывая, как создать NFA, который принимает только те слова, присутствующие в файле?
ответ
Если все, что вам нужно, это NFA без каких-либо требований, конструкция почти тривиальна.
Для каждого слова w создайте отдельную ветвь в вашей NFA с | w | + 1 состояния (не включая начальное состояние). Из состояния начала добавьте пустой переход в первое состояние, а затем добавьте переход из n-го состояния в n + 1-го состояния на n-й символ w. Выполните условие | w | + 1-го состояния.
Это даст вам DFA с таким количеством состояний, как у вас есть символы + слова в вашем файле. Если вы хотите меньше состояний, вы можете сделать что-то более многослойное, создав первый «слой» для всех первых букв во всех словах, второй «слой» для всех вторых букв во всех словах и т. Д. И добавьте переходы из состояний в слое n к состояниям в слое n + 1, если есть слова w, которые делают переходы действительными. Действительно, если вы сделаете это правильно, вы окажетесь в DFA, и это, вероятно, будет минимальным (упражнение: доказать или опровергнуть это).
- 1. Как создать метод, который принимает только элементы, реализующие Iterable
- 2. выбрать только те слова, которые капитализируются
- 3. Как создать слот, который принимает сумму валюты
- 4. Как создать скрипт bash, который принимает аргументы?
- 5. Обыщите Ключевые слова, присутствующие в названии
- 6. Сокращения в NFA, python
- 7. Как создать конструктор, который принимает несколько аргументов?
- 8. Как создать метод, который принимает лямбда-выражение
- 9. Как удалить те же слова?
- 10. Проверка наличия слова в файле
- 11. Невозможно вернуть значения, присутствующие в файле excel.
- 12. PyGTK TextView, который принимает только отдельные строки
- 13. Сравнить те же слова
- 14. Как искать символы, присутствующие в файле в python?
- 15. Список, который принимает только несколько типов
- 16. Как считать слова (а также те с акцентами!) В текстовом файле в Python?
- 17. Создать шаблон раскадровки, который принимает переменные
- 18. Как создать текстовое поле, которое принимает только числа и принимает только буквы в WPF?
- 19. Как создать итератор, который будет возвращать только те элементы, которые отличаются от Java?
- 20. (C/C++) как создать макрос, который принимает оператор инкремента
- 21. Необходимо создать сценарий оболочки, который принимает параметр
- 22. Как найти пересечение двух NFA
- 23. Шаблон, который принимает только аргументы типа указателя
- 24. Сохранять только строки, присутствующие во всех матрицах
- 25. NFA/DFA с переменным условием перехода
- 26. Как сделать оператор If-Then-Else, который принимает только Capitals
- 27. Соберите те же слова в массиве, C
- 28. Создайте WPF TextBox, который принимает только текст
- 29. Как создать производный класс, который принимает wstring и вызывает конструктор базового класса, который принимает строку?
- 30. PostgreSQL: создать запрос, который принимает диапазон дат
Несмотря на название, большинство двигателей регулярных выражений теперь фактически являются NFA. Например, в Python вы можете использовать '\ b (word1 | word2 | word3) \ b' для соответствия списку слов. – justhalf