Обработка Python HTML - PullRequest
       11

Обработка Python HTML

2 голосов
/ 10 февраля 2012

У меня есть HTML-файл с русским текстом.Как я могу получить все слова в тексте без HTML-тегов, специальных символов и т. Д.?

Пример:

<html>...<body>...<div id='text'>Foo bar! Foo, bar.</div></body></html>

Мне нужно:

['foo','bar','Foo','bar']

Я пробовал nltk,но он не поддерживает русские слова.

Ответы [ 4 ]

4 голосов
/ 10 февраля 2012

Я использую библиотеку lxml для анализа xml / html. lxml хорошо работает с любыми данными Юникода.

4 голосов
/ 10 февраля 2012

Обязательно попробуйте BeautifulSoup , он поддерживает Unicode .

0 голосов
/ 23 февраля 2012

Используйте регулярные выражения для удаления тегов.Nltk - это все, что касается анализа языка (существительные против глаголов) и значения слов (семантики), а не удаления строк и сопоставления с образцом, хотя я могу видеть, как кто-то может быть сбит с толку.

Вот функция удаления с использованием regex

import re
def remove_html_tags(data):
    p = re.compile(r'<.*?>')
    return p.sub('', data)
0 голосов
/ 11 февраля 2012

Используйте lxml.Он может удалять теги, элементы и многое другое:

import urllib2

from lxml import etree


URL = '/5398439/obrabotka-python-html'

html = urllib2.urlopen(URL).read()
tree = etree.fromstring(html, parser=etree.HTMLParser())

tree.xpath('//script')
# [<Element script at 102f831b0>,
#  ...
#  <Element script at 102f83ba8>]

tree.xpath('//style')
# [<Element style at 102f83c58>]

tags_to_strip = ['script', 'style']
etree.strip_elements(tree, *tags_to_strip)

tree.xpath('//style')
# []

tree.xpath('//script')
# []

body = tree.xpath('//body')
body = body[0]

text = ' '.join(body.itertext())
tokens = text.split()
# [u'Stack',
#  u'Exchange',
#  u'log',
#  u'in',
#  ...
#  u'Stack',
#  u'Overflow',
#  u'works',
#  u'best',
#  u'with',
#  u'JavaScript',
#  u'enabled']

В случае текста на русском языке токены выглядят следующим образом:

# [u'\xd1\x8d\xd1\x84\xd1\x84\xd0\xb5\xd0\xba\xd1\x82\xd1\x8b\xe2\x80\xa6',
#  u'\xd0\x9c\xd0\xb0\xd1\x80\xd0\xba',
#  ...
#  u'\xd0\x9c\xd0\xb0\xd0\xb9\xd0\xb5\xd1\x80']

Обработка ошибок - ваше домашнее задание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...