@ru_python

Страница 2057 из 9768
Роман
19.01.2017
04:00:42
а если не секрет, чего делаешь с ней?)

просто мне тоже нужна, но возможно и не нужна :D

IH
19.01.2017
04:01:11
а если не секрет, чего делаешь с ней?)
Синтаксическое дерево строю)

Google
Nikolay
19.01.2017
04:03:56
бери pandas и все

IH
19.01.2017
04:05:02
бери pandas и все
а зачем городить либы на либах? Если как мне уже подсказали - можно просто проверить строку, до чего я не догадался?

Nikolay
19.01.2017
04:05:18
она за тебя и валидацию сделает, и колонки поназывает

зачем костыли делать?

не говоря уже о том, что на ней будет быстрее в разы работать

IH
19.01.2017
04:05:52
ну потому что есть либы для задачи конкретной
так. ща скину скрин текстового файла

Вот таких предложений, разбитых по синтаксису - 200 мб

В середине примерно, после 100+ эпох начинается валидация, где каждая строка имеет вид типа

14\t단\t_\tJKO\tJKO\t_\t12\tNP_OBJ\t_\t_\tMOD

вот это все нужно валидировать. Но что-то либо в моем коде не так, либо в тренировочном файле не так и иногда выходит VOD\t_\tMOD

Вот это я и пытался словить

Nikolay
19.01.2017
04:13:11
японский лисп

Google
Alexey
19.01.2017
04:13:30
Эм.. А зачем нейросеть для синтаксического дерева?

IH
19.01.2017
04:13:40
японский лисп
"корейский". "не лисп"

Nikolay
19.01.2017
04:13:49
согласен, корейский

но все равно - AST

IH
19.01.2017
04:14:11
Эм.. А зачем нейросеть для синтаксического дерева?
чтобы ей передавать предложение и она строила синтаксическое дерево сама

Nikolay
19.01.2017
04:14:45
а какое отношение имеет нейросеть к построению синтаксического дерева?

NLP и марковские модели отменили?

ну ладно, это пофиг

но в итоге ты хочешь парсить выдачу дерева в таком формате, правильно?

IH
19.01.2017
04:15:36
а какое отношение имеет нейросеть к построению синтаксического дерева?
нормальных нлп для корейского языка нет, это факт. Нейросеть получше будет

но в итоге ты хочешь парсить выдачу дерева в таком формате, правильно?
нет, я хочу чтобы валидация прошла нормально) А потом уже передавать сетке свои предложения

Nikolay
19.01.2017
04:16:15
погоди

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

если тебе нужно избежать ошибки при парсинге строк с разным количеством полей - бери модуль csv и иди по каждой строке отдельно

IH
19.01.2017
04:19:46
давай по порядку, в чем конкретно вопрос? я не вижу никакой связи между строчкой кода выше и тем, что на скриншоте
Еще раз. Нейросеть тренируется на корпусе текстов. Потом скрипт разбивает предложения на морфемы и передает в сетку для валидации, сравнивая с оригиналом. Линии читаются сеткой через очередной скрипт, обмен идет через stdout-stdin. Вот здесь и загвоздка

Nikolay
19.01.2017
04:21:43
тогда у тебя проблема не в месте, где ты читаешь, а в месте, где генеришь

IH
19.01.2017
04:22:39
то есть у тебя 10 входных узлов, а полей в строке после разбития почему-то иногда бывает не 10, а 11?
да. и если я правильно понимаю, это проблема корейского языка, когда он разбивает морфему на две части.

Nikolay
19.01.2017
04:23:16
вставь костыль в генераторе, чтобы при таком раскладе использовался другой разделитель

это спасет?

Google
IH
19.01.2017
04:24:26
вставь костыль в генераторе, чтобы при таком раскладе использовался другой разделитель
вообще у меня нет прав, чтобы так делать. Но я попробовал в консоли - скрипт весь падает, т.к. вместо цифр/морфем получает кашу с разделителем

Boris
19.01.2017
04:24:32
теперь проблемы корейского языка стали твоими проблемами

Nikolay
19.01.2017
04:24:57
ну, ты заранее же не знаешь, какая именно морфема разделилась на две?

IH
19.01.2017
04:25:03
теперь проблемы корейского языка стали твоими проблемами
у меня проблема корейского языка/культуры/общества/(вставитьнужное) уже лет так 14

Nikolay
19.01.2017
04:25:09
если ты не знаешь - тогда что ни делай, в итоге будет неверно

IH
19.01.2017
04:25:58
если ты не знаешь - тогда что ни делай, в итоге будет неверно
вот поэтому я хочу пропустить эти строки, вообще не вставляя в валидацию. Переходить на другой НЛП для разбития на морфемы уже поздно - большие дяди определили инструменты

IH
19.01.2017
04:26:45
слушай, ну тогда делай просто генератор для чтения с try except
Ну вот он: checkline = line.split('\t') if len(checkline) >=10: try: mseq,morph,_,tag,_,_,mgov,mptst,_,_,deprel = line.split('\t',10) except ValueError: mseq,morph,_,tag,_,_,mgov,mptst,_,deprel = line.split('\t',10) else: sys.stderr.write("I can't process this line" + "\n" + line) pass

Nikolay
19.01.2017
04:27:02
ну да, типа того

лучше ты никак не сделаешь, боюсь

IH
19.01.2017
04:27:17
только проблема теперь в том, что нужно весь код вставить в try except, а то ошибка в local variable referenced before assignment

Nikolay
19.01.2017
04:27:31
нет, почему весь?

IH
19.01.2017
04:27:38
лучше ты никак не сделаешь, боюсь
честно, у самого глаза болят смотрять на такой код

нет, почему весь?
было так: mseq, morph blabla = line.split() mseq = int(mseq) кучакода

Pavel
19.01.2017
04:29:27
mseq=morph=tag=mgov=mptst=deprel=None перед первым try?

Nikolay
19.01.2017
04:29:39
def iter_input(): for line in sys.stdin: fields = line.split('\t', 10) if len(checkline) == 10: yield fields

ты не можешь делать >=, а потом распаковку

в распаковке число всегда строгое

Google
IH
19.01.2017
04:30:12
mseq=morph=tag=mgov=mptst=deprel=None перед первым try?
Хм, тогда упадет все, т.к. весь код в for цикле

Nikolay
19.01.2017
04:30:55
и потом, зачем два раза сплитать строку? у тебя же все уже лежит в checkline

Pavel
19.01.2017
04:30:57
Хм, тогда упадет все, т.к. весь код в for цикле
ты мой друг или медведя? Теперь ещё и цикл появился.

Nikolay
19.01.2017
04:31:52
Через else лучше разве?
как лучше - лучше через генератор, как я выше написал, пусть с проверками

но так, как в твоем примере - неправильно

IH
19.01.2017
04:32:07
ты мой друг или медведя? Теперь ещё и цикл появился.
Я еще больше скажу - это вообще функция и она вызывается из другой функции, а возвращает лист скомпонованных значений

Pavel
19.01.2017
04:34:25
Хм, тогда упадет все, т.к. весь код в for цикле
но чего падать, если тремя строками ниже ты в эти переменные всё равно что-то запишешь.

Admin
ERROR: S client not available

Boris
19.01.2017
04:35:33
Ну вот он: checkline = line.split('\t') if len(checkline) >=10: try: mseq,morph,_,tag,_,_,mgov,mptst,_,_,deprel = line.split('\t',10) except ValueError: mseq,morph,_,tag,_,_,mgov,mptst,_,deprel = line.split('\t',10) else: sys.stderr.write("I can't process this line" + "\n" + line) pass
зачем все эти эксепты? так не оч стабильно, вдруг там длина 12 выскочит и все обработается не так как задумано или еще чего. вот вариант: if len(checkline) == 11: process_data elif len(checkline) == 10: process_data else: skip_line

Nikolay
19.01.2017
04:36:25
а как их распаковывать потом - это уже дело другое

IH
19.01.2017
04:42:36
Генератор... Пока попробую по коду выше, если не получится - буду ковырять генератор

Pavel
19.01.2017
04:43:29
Генератор... Пока попробую по коду выше, если не получится - буду ковырять генератор
было бы что ковырять, строку yield тратата в цикле добавить

Maxim robox
19.01.2017
04:54:11
в распаковке число всегда строгое
Не обязательно. Можно же типа a, b, c, *rest = values_to_unpack

Nikolay
19.01.2017
04:55:01
Не обязательно. Можно же типа a, b, c, *rest = values_to_unpack
можно, но это только начиная с питона 3.5 вроде

да и вообще, зачем tsv разбирать таким макаром?

Google
Maxim robox
19.01.2017
04:56:18
Тред не читал. Почему не csv либой?

Nikolay
19.01.2017
04:57:11
Тред не читал. Почему не csv либой?
потому что там не совсем csv, там результат разбора предложения на синтаксические единицы, и он необязательно константной длины

я не уверен, что csv.reader не упадет на такой ерунде

Maxim robox
19.01.2017
05:00:37
Не уверен, что csv должен знать количество столбцов.

Заранее

Nikolay
19.01.2017
05:01:50
ну, по большому счету, здесь пофиг, каким модулем сплитать

тут надо именно по колонкам разобрать именованным по определенным правилам

Maxim robox
19.01.2017
05:02:59
Может регэкспом? :3

Nikolay
19.01.2017
05:03:16
не учи плохому)

Maxim robox
19.01.2017
05:05:20
Всё становится лучше с регэкспами. :3

Nikolay
19.01.2017
05:05:48
это только если ты на темной стороне силы

в питоне регэкспы за редким исключением - большое зло))

Maxim robox
19.01.2017
05:06:10
Почему?

Nikolay
19.01.2017
05:07:44
в силу имплементации. Там она приделана сбоку и довольно хреновая по производительности

во многих простых задачах комбинации split() и каких-нибудь startswith() будут в разы быстрее

Nikolay
19.01.2017
05:25:20
есть тесты где посмотреть?
да там оно и так очевидно в простых случаях, вот, например https://stackoverflow.com/questions/4901523/whats-a-faster-operation-re-match-search-or-str-find

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

Alexey
19.01.2017
05:26:44
проблема еще и в том, что в случае регулярок обычно требуется несколько проходов по строке
не, ну погоди. обычно регулярка первый раз при вызове match, search делает compile и дальше оно на повторных поисках должно быть быстрее

Nikolay
19.01.2017
05:27:02
поэтому компилить ее надо руками и самому

самое неудачное, что можно сделать - это генерить в цикле регулярку и по ней тут же искать

Страница 2057 из 9768