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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Текст по строчкам  (Прочитано 1869 раз)

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

Оффлайн Grigory Smirnov

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1339
  • Дайте мне исходники, и я переверну Землю.
    • Просмотр профиля
    • Дафтер
Текст по строчкам
« : 12 Августа 2013, 12:24:25 »
Приветствую всех. Для проекта нужен txt файл, где будет текст по строчкам. Допустим, мы имеем:
(Нажмите, чтобы показать/скрыть)

А надо:
(Нажмите, чтобы показать/скрыть)

Кто подскажет, как это сделать (желательно средствами python)?
P.S. Конечно, можно в конце каждого текста поставить *, к примеру, но файл большой, замучаешься.

Оффлайн mrDoctorWho

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: Текст по строчкам
« Ответ #1 : 12 Августа 2013, 12:44:07 »
with open(filename, "w+") as file:
    data = file.read().splitlines()
    file.write(str.join(" ", data))

Оффлайн Grigory Smirnov

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1339
  • Дайте мне исходники, и я переверну Землю.
    • Просмотр профиля
    • Дафтер
Re: Текст по строчкам
« Ответ #2 : 12 Августа 2013, 12:58:05 »
mrDoctorWho, ваш код удаляет весь текст в файле и все.

adawdp

  • Гость
Re: Текст по строчкам
« Ответ #3 : 12 Августа 2013, 13:11:52 »
— А bash не подойдёт? Ну а вдруг…
#!/bin/sh
sed -i -e 's/$/ /' 3pa3oK.txt | tr '\n' ' ';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]*$//' 3pa3oK.txt
— 3pa3oK.txt  это просто файл где нужно сделать преобразования, а со скриптом обычно в текстовой файл и сделать исполняемым…
— Ну вот с пояснениями…
sed -i -e 's/$/ /' 3pa3oK.txt | tr '\n' ' ';           # добавляет пробел в конец сток
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]*$//' 3pa3oK.txt;           # убирает пробелы и таб. конца и начала файла

Оффлайн Grigory Smirnov

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1339
  • Дайте мне исходники, и я переверну Землю.
    • Просмотр профиля
    • Дафтер
Re: Текст по строчкам
« Ответ #4 : 12 Августа 2013, 13:24:18 »
adawdp, спасибо, но он делает немного другое. Все равно пригодится!

Еще нужна помощь :-[  Может уже есть готовые сборники по строчкам текстов?
« Последнее редактирование: 12 Августа 2013, 13:32:25 от Grigory Smirnov »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Текст по строчкам
« Ответ #5 : 12 Августа 2013, 15:10:27 »
#! /usr/bin/env python
#!-*-coding: UTF-8-*-

filename='text'
f1=open(filename,"r")
data=f1.read().replace('\n',' ')
f1.close()

open(filename,"w").write(data)

adawdp

  • Гость
Re: Текст по строчкам
« Ответ #6 : 12 Августа 2013, 15:16:48 »
— Ну не знаю, этот скрипт „вытягивает текст“ в одну строчку, потом его можно легко „порезать“ на предложения, при этом правда нужно будет учесть всякие сокращения типа Mr., Ms. и особенности синтаксиса прямой речи…
— Ещё можно „порезать“ скажем на строки по 80 символов… Добавить пустую строку после каждой полной…
— Короче, средствами bash это легко делается, а вот как python'oм не умею :(

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Текст по строчкам
« Ответ #7 : 12 Августа 2013, 15:19:30 »
Код: (bash) [Выделить]
xargs <file
tr '\n' ' ' <file

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Текст по строчкам
« Ответ #8 : 12 Августа 2013, 15:23:35 »
Добавить пустую строку после каждой полной…
#! /usr/bin/env python
#!-*-coding: UTF-8-*-

filename='text'
f1=open(filename,"r")
data=f1.read().replace('\n',' ')+'\n'
f1.close()

open(filename,"w").write(data)

Пользователь решил продолжить мысль 12 Августа 2013, 15:30:55:
— Короче, средствами bash это легко делается, а вот как python'oм не умею :(
Сложно только то, что не знаешь. Питон очень простой в изучении и весьма полезен.
Например:
Можно сделать себе какую-нибудь экзотическую команду для bash средствами питона.

#! /usr/bin/env python
#!-*-coding: UTF-8-*-
import sys

if __name__=="__main__":
if len(sys.argv)!=2:
print '''usage: super_puper_script.py file'''
raise SystemExit(1)
filename= sys.argv[1]

f1=open(filename,"r")
data=f1.read().replace('\n',' ')+'\n'
f1.close()

open(filename,"w").write(data)
« Последнее редактирование: 13 Августа 2013, 08:05:54 от alexander.pronin »

Оффлайн Grigory Smirnov

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1339
  • Дайте мне исходники, и я переверну Землю.
    • Просмотр профиля
    • Дафтер
Re: Текст по строчкам
« Ответ #9 : 13 Августа 2013, 10:04:28 »
Мне надо не весь текст в строчку. Так я тоже могу. Вообщем, это автоматом, видимо не сделать. Подробности скоро появятся.

Оффлайн MuadDlb

  • Участник
  • *
  • Сообщений: 147
  • The Dune Messiah
    • Просмотр профиля
Re: Текст по строчкам
« Ответ #10 : 13 Августа 2013, 11:22:15 »
у вас серьезные проблемы с формулировкой задачи, нереальнейшие я бы сказал

Я так понял сначала вам весь текст в строку - вам уже сделали, потом расставляете \n после каждого [.?!] после которого следует [A-ZА-Я].

([\.\?\!\s]+)(?=[A-ZА-Я])
« Последнее редактирование: 13 Августа 2013, 14:24:14 от MuadDlb »

Оффлайн Jack Sparrow

  • Активист
  • *
  • Сообщений: 641
    • Просмотр профиля
Re: Текст по строчкам
« Ответ #11 : 13 Августа 2013, 13:16:27 »
На самом деле задача не такая уж и простая. Не так давно тоже пытался решить ее. Копался в интернете. Есть даже специальный проект на Python, посвященный этому - NLTK (Natural Language Tool Kit). Там делают токенайзеры, чтобы на любом естественном языке можно было парсить предложения. Правда, я не совсем разобрался с этим.

Но можно и чуть проще сделать - при помощи регулярных выражений. Например, так:

Код: (Python) [Выделить]
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re

# Входной текстовый файл
filename = "sentences.txt"

# Получение текста
fin = open(filename)
text = fin.read()
fin.close()

text = text.replace('\n', ' ')

# Составляем регулярное выражение
pattern = re.compile(r"""
['"(]*        # начало предложения - открывающие кавычки (скобки и т.д.)
[\S*]        # или любой символ, кроме непечатного.
.*?            # основное предложение
[.!?]+        # предложение должно обязательно заканчиваться на любой из этих знаков.
['")]*        # затем могут идти необязательные знаки пунктуации.
""", re.VERBOSE)

res = pattern.findall(text) # разбиваем текст на список предложений

# Вывод результата
for sent in res:
    print(sent)
Во вложении - файл с тестовым предложением. Там пока проблемы, если есть одинаковые знаки препинания на несколько предложений, например таких:

(Это одно предложение. А это другое.)

А также проблема с многоточием...
Но, думаю, можно подправить выражение где-то в районе # основное предложение (до или после него)
Нейросети тебя не заменят. Тебя заменит человек, который умеет ими пользоваться.

Оффлайн MuadDlb

  • Участник
  • *
  • Сообщений: 147
  • The Dune Messiah
    • Просмотр профиля
Re: Текст по строчкам
« Ответ #12 : 13 Августа 2013, 14:23:35 »
выше я дал вам регексп, который с этим запросто справляется, регексп под замену писан. Естественно он считает, что предложение начинается с большой буквы, на доветочие итд пофигу/
Единственное нарекание, что с ходу придумал: На кол бы Mr. Пупкина.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Текст по строчкам
« Ответ #13 : 13 Августа 2013, 14:41:35 »
Трудно сделать то, не знаю что.
Требуются экстрасенсы.
ТС, дайте внятную информацию, чтобы Вы хотите.
Входной(ые) файл(ы) - выходной(ые) файл(ы).
ЗЫ. Обычно после после формулировки ТЗ, уже всем очевидно, что и как надо делать (даже автору).

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7215
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Текст по строчкам
« Ответ #14 : 13 Августа 2013, 22:47:22 »
Grigory Smirnov, менять "\n" на " " чем не устраивает?

 

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