Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Как разбить предложение на отдельные слова в каждой строке?  (Прочитано 1264 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mintol

  • Автор темы
  • Новичок
  • *
  • Сообщений: 25
  • не судите строго, я вообще лингвист :)
    • Просмотр профиля
Собираю корпус текста, и возникли небольшие затруднения.
Дано предложение: Пушкин читает книгу. Оно написано в одной строке и ограничено точкой. А мне нужно, чтобы каждое слово этого предложения писалось на одной строке.
До: Пушкин читает книгу.
После:
Пушкин
читает
книгу.
Как это сделать? промучилась долго, подскажите каким оператором. Пыталась с помощью sort, но всё безуспешно. Буду рада вашему вниманию.

ТС не появлялся на Форуме более полугода по состоянию на 13/07/2019 (последняя явка: 28/11/2018). Модератором раздела принято решение закрыть тему.
--zg_nico
« Последнее редактирование: 13 Июля 2019, 21:42:54 от zg_nico »

adawdp

  • Гость
2015 Nov 18; 07:15 PM; Oakville, ON, Canada.

— Вы понимаете,  mintol, такую или подобную задачу каждый обычно решает путём написания персонального скрипта.
— Базовым набором подобного скрипта могут быть  следующие элементы,перечень, ясное дело, не полный :
Код: (bash) [Выделить]
sed -i s/\\r// 3pa3oK.txt  # замена символа окончания строки…
sed -i -e 's/$/ /' 3pa3oK.txt | tr '\n' ' '  # добавляет пробел в конец сток…
tr '[:upper:]' '[:lower:]' < 3pa3oK.txt > 3pa3oK2.txt  # Прописные в строчные ( кириллица не поддерживается)…
sed -i 's/[,.:;!?«»©—×°–“”→←‖∗↑↓…∞‘’]/\ /g' 3pa3oK.txt  # удаляет те знаки, которые в “[]”…
sed -i -e ':a;N;$!ba;s/\n//g' 3pa3oK.txt  # объединяет строки…
sed -i 's/[ \t][ \t]*/\ /g' 3pa3oK.txt  # меняет пробелы и таб. на один пробел…
sed -i 's/^[ \t]*//;s/[ \t]*$//' 3pa3oK4.txt  # убирает пробелы и таб. конца и начала файла…
tr -s [:space:][:punct:][:digit:][:cntrl:] \\n < 3pa3oK.txt | sort -u > 3pa3oK2.txt # делит на слова и сортирует …

— В общем и так далее…

— Здесь наверное вот так можно попробовать, терминал открыть там где находятся файлы:
Код: (bash) [Выделить]
tr -s [:space:][:punct:][:digit:][:cntrl:] \\n < 3pa3oK0.txt > 3pa3oK1.txt
— В первом файле то что нужно преобразовать, во втором файле готовый результат. Перед этим всё не нужно “вытягивать” в одну строку должно так работать… А с операторами там перебор, наверное, короче почитать нужно руководство и оставить нужное…

— После последнего слова пропадает точка, но это нужно разбираться с операторами часть может быть лишней…

— В общем я не очень специалист :(, может кто из программистов подскажет получше…

— Думаю, что есть масса способов …
« Последнее редактирование: 19 Ноября 2015, 03:24:18 от adawdp »

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
В самом простом варианте:
echo 'Пушкин читает книгу.' | sed -r 's/\s+/\n/g'или
echo 'Пушкин читает книгу.' | tr -s '[:space:]' '\n'

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Код: (Python) [Выделить]
for word in u"Пушкин читает книгу.".split(' '):
    print word
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Phlya, Это Вы показали что знаете Питон?  :P
Код: (Python) [Выделить]
print(*(word for word in u"Пушкин читает книгу.".split()), sep="\n")
Код: (Python) [Выделить]
print(u"Пушкин читает книгу.".replace(" ", "\n"))
Пользователь решил продолжить мысль 19 Ноября 2015, 12:57:43:
Код: (Python) [Выделить]
for l in u"Пушкин читает книгу.":
    if l != " ":
        print(l, end="")
    else:
        print()
else:
    print()
« Последнее редактирование: 19 Ноября 2015, 12:57:43 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4069
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Это что, примеры для второго питона?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
alsoijw, Для 3-го. Легко определить по функции print()
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Azure,
Да какое тут знание, просто еще один вариант.

alsoijw,
Мой для второго.
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4069
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Azure, тогда зачем u в начале строки?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн mintol

  • Автор темы
  • Новичок
  • *
  • Сообщений: 25
  • не судите строго, я вообще лингвист :)
    • Просмотр профиля
Спасибо, оказывается есть много вариантов решения. Очень помогли. Ещё раз благодарю.
Для начала я почистила файл от всех знаков при помощи tr -d
по вашему совету каждое слово преобразовала в одну строку tr -s '[:space:]' '/n'
ну а потом уже по заданию дальше считала частоту слов в порядке убывания sort| uniq -c| sort -nr

всё получилось, спасибо огромное ребята
« Последнее редактирование: 20 Ноября 2015, 22:51:44 от mintol »

 

Страница сгенерирована за 0.08 секунд. Запросов: 23.