LINUX.ORG.RU
ФорумJob

Скрипт для генерации предложений

 


0

2

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

Допустим я загружаю ему текстовой документ со словами:

did
been
now
look
back
my
no
your
which
about
time
down
into
who
can
know
if
just
their
get
over

А на выходе получаю все возможные комбинации предложений из слов, в отдельном текстовом документе с результатом.

Обязательно нужно чтобы на этапе запуска скрипта я мог выбрать минимальное и максимальное количество слов которое может присутствовать в одной строке. То есть допустим все возможные комбинации от 2-ух слов до 6 слов в одной строке. Из списка слов предоставленного ему.

Пример:

just time get
into get
look my get know just
get over if know

И так далее.

Плачу: $10 за такой скриптик вам на битки. (не знаю расценки работы тут) Готов оплатить больше если работа сложна.



Последнее исправление: Proxerboss (всего исправлений: 2)

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

v9lij ★★★★★
()

Под предложением вы подразумеваете просто рандомный набор слов или вы думаете, что можно написать ИИ на баше за 10$, или скрипту даются заранее известные ему слова и он составляет бессмысленные предложения, но с соблюдением граматики?

SR_team ★★★★★
()
Последнее исправление: SR_team (всего исправлений: 1)
Ответ на: комментарий от SR_team

ИИ, лол, тут вы сер конечно загнули) скрипту даются заранее известные ему слова и он составляет бессмысленные предложения, но с соблюдением граматики)

Proxerboss
() автор топика
Ответ на: комментарий от Proxerboss

У тебя в примере предложения бессмысленные.

#!/usr/bin/env python3

from itertools import permutations
from argparse import ArgumentParser, ArgumentError

parser = ArgumentParser(
    description='Print all possible permutations of strings from a file'
)
parser.add_argument(
    '-f', '--file',
    help='file to read strings from'
)
parser.add_argument(
    '-min', '--minimum',
    help='minimal number of words in a single sentence'
)
parser.add_argument(
    '-max', '--maximum',
    help='maximal number of words in a single sentence'
)

if __name__ == '__main__':
    args = parser.parse_args()

    if not args.file:
        raise ArgumentError(args.file, 'You have to define the source file!')

    with open(args.file) as f:
        strings = tuple(filter(None, f.read().splitlines()))

    minimum = int(args.minimum) or 1
    maximum = int(args.maximum) or len(strings)

    for length in range(minimum, maximum+1):
        for sentence in permutations(strings, length):
            print(' '.join(sentence))
beresk_let ★★★★★
()
Ответ на: комментарий от beresk_let

дайте свой биткоин кошелек, вам отправить 10 дол? скажите что дописать чтобы сохранение результата было в отдельный текстовой документ, и чтобы он не отображался в самом терминале

Proxerboss
() автор топика
Ответ на: комментарий от Proxerboss

Вот тебе вторая версия, чуть причёсанная. Результат ищи рядом с исходным файлом с тем же именем и расширением .out.

#!/usr/bin/env python3

from itertools import permutations
from argparse import ArgumentParser

parser = ArgumentParser(
    description='Print all possible permutations of strings from a file'
)
parser.add_argument(
    '-min', '--minimum',
    help='minimal number of words in a single sentence'
)
parser.add_argument(
    '-max', '--maximum',
    help='maximal number of words in a single sentence'
)
parser.add_argument('input', help='file to read strings from')

if __name__ == '__main__':
    args = parser.parse_args()

    with open(args.input) as f:
        strings = tuple(filter(None, f.read().splitlines()))

    minimum = args.minimum or 1
    maximum = args.maximum or len(strings)

    try:
        with open('{}.out'.format(args.input), 'x') as f:
            f.write('\n'.join(
                ' '.join(sentence)
                for length in range(int(minimum), int(maximum)+1)
                for sentence in permutations(strings, length)
            ))
    except FileExistsError:
        print('It seems "{}" has already been processed!'.format(args.input))

beresk_let ★★★★★
()
Ответ на: комментарий от Proxerboss

А если и впрямь хочешь заплатить, то кидай сюда:

1PgM6pdkrkhFgfNiZJWuauXgc13ccXB2kP

beresk_let ★★★★★
()
Ответ на: комментарий от beresk_let

а как файл загрузить в скрипт и начать работу? со словами?

вы убрали из этого скрипта

parser.add_argument( '-f', '--file', help='file to read strings from'

Proxerboss
() автор топика
Ответ на: комментарий от Proxerboss

Он теперь идёт обязательным аргументом input:

parser.add_argument('input', help='file to read strings from')
В первой версии я велосипедил отдельную проверку на его наличие, так делать не стоило.
Просто запусти
/path/to/script.py /path/to/text.txt
и укажи параметры -min и -max по вкусу.

beresk_let ★★★★★
()
Последнее исправление: beresk_let (всего исправлений: 2)
Ответ на: комментарий от beresk_let

отправил вам $10.

а вы можете сделать так чтобы я мог выбрать будет ли пробел между сгенерированными словами или нет?

допустим у меня сейчас сгенерировалось это:

looking when
looking could
looking then
looking be
looking them
looking did
looking been
looking now
looking look
looking back
looking my
looking no
looking your
looking which
looking about
looking time
looking down
looking into
looking who
looking can
looking know
looking if
looking just
looking their
looking get
looking over
looking more
looking some
looking man
looking come
looking an

но если бы я ввел команду -p off то у меня получилось бы вот так?

lookingwhen
lookingcould
lookingthen
lookingbe
lookingthem
lookingdid
lookingbeen
lookingnow
lookinglook
lookingback
lookingmy
lookingno
lookingyour
lookingwhich
lookingabout
lookingtime
lookingdown
lookinginto
lookingwho
lookingcan
lookingknow
lookingif
lookingjust
lookingtheir
lookingget
lookingover
lookingmore
lookingsome
lookingman
lookingcome
lookingan

я очень хотел бы чтобы я мог до генерации выбирать нужен ли мне пробел в фразах (-p on) или нет (-p off).

буду очень благодарен.

скрипт который вы скинули, работает, спасибо.

Proxerboss
() автор топика
Ответ на: комментарий от Proxerboss

Лови патч. При указании параметра -p (без on/off) слова будут лепиться в один кусок без пробелов.

--- a/script.py
+++ b/script.py
@@ -14,6 +14,11 @@
     '-max', '--maximum',
     help='maximal number of words in a single sentence'
 )
+parser.add_argument(
+    '-p', '--piece',
+    help='write each string as one piece without word separating',
+    action='store_true'
+)
 parser.add_argument('input', help='file to read strings from')
 
 if __name__ == '__main__':
@@ -24,11 +29,12 @@
 
     minimum = args.minimum or 1
     maximum = args.maximum or len(strings)
+    connector = (' ', '')[args.piece]
 
     try:
         with open('{}.out'.format(args.input), 'x') as f:
             f.write('\n'.join(
-                ' '.join(sentence)
+                connector.join(sentence)
                 for length in range(int(minimum), int(maximum)+1)
                 for sentence in permutations(strings, length)
             ))

beresk_let ★★★★★
()
Ответ на: комментарий от beresk_let

можете скинуть фулл скрипт? че то у меня не получается запустить, может не туда добавляю.

спасибо

Proxerboss
() автор топика
Ответ на: комментарий от beresk_let

дайте пожалуйста свои контактные данные, есть ещё работа одна, заплачу)

доработать нужно кое-что

Proxerboss
() автор топика
Ответ на: комментарий от beresk_let

как бы смешно не звучало но нет, я ещё не начал изучать программирование. и по этому в этих вещах не силен.

у вас есть жаба или там где можно быстро обмениваться сообщениями? чтобы не ждать ответа в комментариях

Proxerboss
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.