Цитата: Тайльнемер от июля 8, 2012, 18:59Clojure позволяет работать с юникодом, в т.ч. и в регексах (в первом примере \p{L} — поиск всех символов, определенных в юникоде как буквы). Впрочем, мой вариант для юниксовых утилит должен работать и с юникодом, при условии, что в тексте используется только ascii-совместимая пунктуация.
А unicode-compatible solution-то есть?
Цитата: Python от июля 8, 2012, 17:27А unicode-compatible solution-то есть?
Cyrillic-compatible solution:
Code: [Select]cat text | tr '[\000-\100\133-\140\173-\177]' '\n' | sort -u >wordlist
Цитата: Python от июля 8, 2012, 14:12Cyrillic-compatible solution:Цитата: shell от июля 8, 2012, 13:24I've just tested it in Cygwin. It is good for basic ASCII, but Cyrillic letters are not :alpha:, so they're skipped too.
tr -c '[:alpha:]' '\n' < text | sort -u > wordlist
cat text | tr '[\000-\100\133-\140\173-\177]' '\n' | sort -u >wordlist
Цитата: shell от июля 8, 2012, 13:24I've just tested it in Cygwin. It is good for basic ASCII, but Cyrillic letters are not :alpha:, so they're skipped too.
tr -c '[:alpha:]' '\n' < text | sort -u > wordlist
Цитата: Максимм от июля 6, 2012, 21:26Как раз это и делает программа Python'а, которую он привёл выше.
P.S. Да хотя бы и не переводить в начальную форму, сойдёт и без этого. Лишь бы убрать все словарные повторы, а остаток превратить в форму списка.
Цитата: Python от июля 6, 2012, 06:09Too long, too ugly. The best solution:
Написать программу, разбивающую текст на слова и сортирующую их в алфавитном порядке — несложно. На Clojure это будет примерно так:
(->> (slurp "inputfile.txt") ; чтение файла
(re-seq #"\p{L}+") ; поиск последовательностей букв
set sort ; исключение дубликатов и сортировка
(reduce #(str %1 "\n" %2)) ; объединить слова в текст, разбитый на строчки
(spit "outputfile.txt")) ; запись в файл
tr -c '[:alpha:]' '\n' < text | sort -u > wordlist
Цитата: Максимм от июля 6, 2012, 21:26
Да хотя бы и не переводить в начальную форму, сойдёт и без этого. Лишь бы убрать все словарные повторы, а остаток превратить в форму списка.
Цитата: wangjhenbai от июля 6, 2012, 09:40В нашем случае, lazy-sequence сразу же прокручивается через set и sort, поэтому от laziness здесь пользы никакой.Цитата: Python от июля 6, 2012, 06:09
(re-seq #"\p{L}+") ; поиск последовательностей буквЦитата: http://clojuredocs.org/clojure_core/clojure.core/re-seqReturns a lazy sequence of successive matches of pattern in string, using java.util.regex.Matcher.find(), each such match processed with re-groups.Цитироватьlazy sequenceВот когда я начинаю завидовать клоџурщикам...
Цитата: Python от июля 6, 2012, 06:09
(re-seq #"\p{L}+") ; поиск последовательностей букв
Цитата: http://clojuredocs.org/clojure_core/clojure.core/re-seqReturns a lazy sequence of successive matches of pattern in string, using java.util.regex.Matcher.find(), each such match processed with re-groups.
Цитироватьlazy sequenceВот когда я начинаю завидовать клоџурщикам...
Страница создана за 0.038 сек. Запросов: 20.