Как написать программу в прологе, которая разбивает слово на слоги с использованием предиката: Первый слог гласный-согласный-гласный .. или Второй слог: гласный-согласный-согласный-гласный. Например; abandon = aba-ndon ..Обработка текста в прологе
ответ
Эта программа в основном применит указанные вами правила, но я не думаю, что она станет хорошим инструментом для обработки текстов.
vowel(a).
vowel(e).
vowel(i).
vowel(o).
vowel(u).
consonant(L):- not(vowel(L)).
syllable(W, S, RW):- atom_chars(W, [V1, C, V2|Tail]), vowel(V1), consonant(C), vowel(V2), !, atomic_list_concat([V1, C, V2], S), atomic_list_concat(Tail, RW).
syllable(W, S, RW):- atom_chars(W, [V1, C, C2, V2|Tail]), vowel(V1), consonant(C), consonant(C2),vowel(V2), !, atomic_list_concat([V1, C, C2, V2], S), atomic_list_concat(Tail, RW).
syllable(W, W, _).
break(W, B):- syllable(W, B, ''), !.
break(W, B):- syllable(W, S, RW), break(RW, B2), atomic_list_concat([S, '-', B2], B).
Программа определяет, что такое гласный, а что нет. Также слог в соответствии с вашими правилами и как сломать слово. Используя предикат'break/2 'вы можете проверить:
?- break(abaebbi, B).
B = 'aba-ebbi'
Что заставляет меня усомниться в ваших правилах, кроме моего плохого знания английского языка, что тестирование с каждым словом моим ответом, возвращает целое слово всегда :)
?-break('syllable', B).
B = syllable
Это было чрезвычайно, очень полезно. Спасибо вам большое за ваше время. –
@ninjaman, спасибо, я рад помочь. – Yasel
Там в общедоступный список слов, расщепляется на «слогов» (не уверен точно, что критерием является) here. Каждая строка - это слово, поэтому вы можете читать слова в один момент времени, разбивать их на слоги и хранить их в некотором динамическом предикате. Предположим, что файл называется mhypth.txt
, так как она находится в ссылке выше:
go :-
%% I don't know why 65533 is the code for the separator, but it is.
string_codes(Sep, [65533]),
setup_call_cleanup(
open(<Path to mhyph.txt>>, read, St),
read_sylls(St, Sep),
close(St)
).
:- dynamic word_sylls/2.
read_sylls(Stream, Sep) :-
read_line_to_string(Stream, S),
(S == end_of_file -> true
;
split_string(S, Sep, Sep, Parts),
atomics_to_string(Parts, Word),
asserta(word_sylls(Word, Parts)),
read_sylls(Stream, Sep)
).
Если вы загрузите это в ваш интерпретатор SWI Prolog, вы можете сделать что-то вроде этого:
?- go.
true.
?- word_sylls(A,B).
A = "Zurich",
B = ["Zu", "rich"] ;
A = "Zollner",
B = ["Zoll", "ner"] ;
A = "zymurgy",
B = ["zy", "mur", "gy"] ;
A = "zymosis",
B = ["zy", "mo", "sis"] ;
A = "zymoplastic",
B = ["zy", "mo", "plas", "tic"] ;
A = "zymolytic",
B = ["zy", "mo", "lyt", "ic"] ;
A = "zymologic",
B = ["zy", "mo", "log", "ic"]
?- word_sylls("abandon", Sylls).
Sylls = ["a", "ban", "don"].
?-
- 1. Обработка текста пролог
- 2. Обработка всех возможных результатов в прологе
- 3. Обработка текста в jTextArea
- 4. Обработка текста в playbook
- 5. Обработка текста в php
- 6. Обработка текста в Ruby
- 7. Обработка текста в ant
- 8. Обработка текста в скрипте оболочки
- 9. Параллельная обработка текста в julia
- 10. Обработка текста в реальном времени
- 11. Предварительная обработка текста в Python
- 12. Обработка текста через java
- 13. Java: обработка строк текста
- 14. Deep обработка текста файла
- 15. Обработка текста - Извлечение Cleartext
- 16. Обработка неанглийского текста
- 17. Unix обработка текста
- 18. Обработка текста ... Скрипты оболочки
- 19. Обработка текста с метеоритом
- 20. Обработка текста с PHP
- 21. Эффективная обработка текста Java
- 22. Python и обработка текста
- 23. обработка, замена текста
- 24. Обработка текста на Java
- 25. Обработка и удаление текста
- 26. многопроцессор python - обработка текста
- 27. Команда Grep - Обработка текста
- 28. Обработка текста на JavaScript
- 29. jQuery.keypress: Мгновенная обработка текста
- 30. Обработка текста с двумя файлами
определить, какие гласные и согласные, затем перебирают слово и анализируют строку. – Carcigenicate
@Carcigenicate звучит хорошо –
Сделайте поиск по «прологам DCG». – lurker