2014-12-31 2 views
0

Ну, я пытаюсь разобрать конкретный html-ответ. Я успешно извлек текст со страницы в виде непрерывной строки.Как получить осмысленные слова, разделив непрерывную строку?

для например:

storyOnce Соню в storyThe соня в давно там были три маленькие сестры и их имена wereElsie LacieandTillie \ Nand они жили на дне колодца Blockquote

Мои 1-й вопрос: мне нужно разбить строку, чтобы получить отдельные слова, например, например:

история После

должен быть преобразован в список значимых слов ...

[, ...., история, однажды ....]

и я также необходимо избавиться от символов «\ n». Я попытался с помощью

.strip

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

+0

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

+0

Было бы легко, если вы это сделаете, извлекая текст. – WannaBeCoder

+0

@WannaBeCoder Не может быть сделано !!! Текст точно так, как я его извлек. –

ответ

3

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

Вы можете использовать split и прикрепите тетиву без \n, если вы в конечном итоге расщепление на \n

Для вас исходной задачи, так как текст точно так, как вы распаковали его, что бы я сделал расщепляется на пространстве первого

string.split(' ') 

который даст что-то вроде

[The, Dormouse's, storyThe, Dormouse's, storyOnce, upon, a, time,...] 

, а затем вы можете использовать некоторое простой словарь отображение с помощью смарт-алгоритма следующего образом:

перебрать результирующий список:

  • Используйте словарь или некоторую библиотеку NLP для проверки совпадений («storyThe», например, история матчей - так он должен split - вы можете сделать еще одну проверку, что остальные «The» тоже существуют в словаре »
  • попробуйте разумно игнорировать имена, которые не будут в словаре. Некоторые библиотеки НЛП могут помочь в этом.

Это проблема text segmentation, поэтому вам нужно использовать некоторую форму обработки естественного языка, чтобы выполнить некоторую токенизацию и извлечение текста.

@WannaBeCoder ниже предлагает NLTK платформу и заказать здесь: http://www.nltk.org/book/

Весело это сложно и здорово!

+0

Возможно, вы также можете добавить часть сегментации текста, чтобы сделать ваш ответ более сложным. – WannaBeCoder

+0

Спасибо за ваше предложение @WannaBeCoder! –

1

Я создаю аналогичную программу. Я создал список слов из предложения, используя .split(). И сравнил его со словарем. Тогда для неизвестных слов. Я использовал двоичную карту и создал все возможные комбинации кусков. Затем из этих комбинаций я разделил уникальные куски. И сравнил его со словарем. Теперь у меня есть все возможное сочетание неизвестного слова и частей от слова, которое из словаря. Я сравнивал как для каждой возможной комбинации блоков неизвестного слова, так что у меня есть наименьшее возможное (количество кусков - количество слов в этом фрагменте из словаря).

Но мой метод занимает много времени. И имеет проблемы с неоднозначными линиями, такими как «loveisnowhere».

+0

Мне любопытно, как вы имели дело с двусмысленными, вы пошли с более высоким распределением вероятности или чем-то фантастическим или просто выбрали случайный, который соответствовал словарю? –

+1

Мне еще предстоит решить эту проблему. В настоящее время он дает мне список всех наилучших результатов. И один из этих результатов является ожидаемым. И для большинства предложений этот список составляет менее 10 элементов. – AmeyA

+0

интересно, я предлагаю вам использовать некоторые значения вероятности. Если у вас есть корпус, который охватывает множество предложений и формулировок, легко определить вероятности того, сколько раз эта фраза возникает, учитывая, что она возникает после ... и т. Д. И выбирает ту, которая имеет более высокое значение. –

0
import re 
ans = "" 
for a in re.findall('[A-Z][^A-Z]*',"The Dormouse's storyThe Dormouse's storyOnce upon a time there were three little sisters and their names wereElsie LacieandTillie \nand they lived at the bottom of a well Blockquote"): 
    ans+=a.strip()+' ' 

ans 
"The Dormouse's story The Dormouse's story Once upon a time there were three little sisters and their names were Elsie Lacieand Tillie \nand they lived at the bottom of a well Blockquote " 
+0

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

+0

Если бы текст был «История Сони в рассказе Соня в свое время была тремя маленькими сестрами, и их имена были Elsie LacieandTillie \ nand, они жили на дне колодца Blockquote'. Ваш код не работает –

Смежные вопросы