Извлечь слова из текстового файла - PullRequest
0 голосов
/ 08 июня 2018

Я работаю с рекурсивными нейронными сетями и мне нужно обработать мой входной текстовый файл (содержащий деревья) для извлечения слов.Входной файл выглядит следующим образом:

(3 (2 (2 The) (2 Rock)) (4 (3 (2 is)) (4 (2 Destined) (2 (2 (2 (2)(2 к) (2 (2 бэ) (2 (2 б) (2 (2-е) (2 (2 (2 век) (2-е)) (2 (3 новых) (2 (2 ``) (2 конана)))))))) (2 '')) (2 а)) (3 (2 та) (3 (2 он) (3 (2 'с) (3 (2 ед)) (3 (2к) (4 (3 (2 делают) (3 (3 (2 a) (3 всплеск)) (2 (2 даже) (3 больше)))) (2 (2 больше) (2 (2 (2 (2)(1 (2 Арнольд) (2 Шварценеггер)) (2,)) (2 (2 Жан-Клод) (2 (2 Ван) (2 Дамм)))) (2 или)) (2 (2 Стивен) (2Сигал))))))))))))) (2.)))

(4 (4 (4 (2)) (4 (3 великолепно) (3 (2 тщательно продумано) (2продолжение)))) (2 (2 (2 of) (2 ``)) (2 (2 The) (2 (2 (2 Lord) (2 (2 of) (2 (2 the) (2 Rings)))) (2 (2 '') (2 трилогия)))))) (2 (3 (2 (2 есть) (2 (2 так) (2 огромных))) (2 (2)) (3 (2(2 (2 a) (2 колонка)) (2 (2 из) (2 слова))) (2 (2 (2 (2 могут) (1 нет)) (3 соответственно)) (2 (2 описания) (2 (3 (2 (2 соавтора / режиссера) (2 (2 Питера) (3 (2 Джексона) (2-е)))) (3 (2 дополнено) (2 видения))) (2 (2 из 2) (2 (2 (2 JRR) (2 (2 Толкиен) (2-е годы))) (2 Средиземье))))))))) (2.)))

В качестве вывода я хочу получить список слов в новом текстовом файле в виде:

Рок

*

предназначен

...

(Не обращайте внимания на пробелы между строками.)

Я пытался сделать это в python, но не смог найти решение.Кроме того, я прочитал, что awk можно использовать для обработки текста, но он не смог создать никакого рабочего кода.Любая помощь приветствуется.

Ответы [ 4 ]

0 голосов
/ 08 июня 2018

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

import re

# split on parens, numbers and spaces
spl = re.compile("\(|\s|[0-9]|\)")
words = filter(None, spl.split(string_to_split))
0 голосов
/ 08 июня 2018

Вы можете использовать регулярное выражение!

import re
my_string = # your string from above
pattern = r"\(\d\s+('?\w+)"
results = re.findall(pattern, my_string)
print(results)
# ['The',
#  'Rock',
#  'is',
#  'destined',
#  'to',
#  'be',
#  'the',
# ...

Обратите внимание, что re.findall вернет список совпадений, поэтому, если вы хотите распечатать их все в одном предложении, выможно использовать:

' '.join(results)

или любой другой символ, с которым вы хотите разделить слова вместо пробела.

Если разбить шаблон регулярного выражения, мы получим:

pattern = r"""
           \(           # match opening parenthesis
             \d         # match a number. If then numbers can be >9, use \d+
               \s+      # match one or more white space characters
                  (     # begin capturing group (only return stuff inside these parentheses)
                   '?   # match zero or one apostrophes (so we don't miss posessives)
                   \w+  # match one or more text characters
                  )     # end capture group
           """
0 голосов
/ 08 июня 2018

Вы можете использовать re.compile:

import re
def getWords(text):
    return re.compile('[A-Za-z]').findall(text)

with open('input_file.txt') as f_in:
  with open('output_file.txt', 'a') as f_out:
    f_out.write('\n'.join(getWords(f_in.read())))
0 голосов
/ 08 июня 2018

Вы можете использовать re.findall:

import re
with open('tree_file.txt') as f, open('word_list.txt', 'a') as f1:
   f1.write('\n'.join(set(re.findall("[a-zA-Z\-\.'/]+", f.read()))))

При выполнении кода выше для текста, вывод:

make
not
gorgeously
the
Conan
than
so
huge
and
co-writer/director
Peter
st
is
can
Schwarzenegger
expanded
even
trilogy
Middle-earth
Segal
continuation
column
vision
's
he
''
Damme
adequately
that
greater
Steven
Rock
Jackson
Rings
a
Tolkien
Van
be
words
going
to
new
Jean-Claud
or
elaborate
of
splash
Lord
The
Arnold
describe
destined
J.R.R.
Century
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...