Python Regular Expression nltk извлечение веб-сайта - PullRequest
2 голосов
/ 07 октября 2011

Привет, мне никогда раньше не приходилось сталкиваться с регулярными выражениями, и я пытаюсь предварительно обработать некоторый необработанный текст с помощью Python и NLTK. когда я попытался токенизировать документ, используя:

tokens = nltk.regexp_tokenize(corpus, sentence_re)
sentence_re = r'''(?x)  # set flag to allow verbose regexps
  ([A-Z])(\.[A-Z])+\.?  # abbreviations, e.g. U.S.A.
| \w+(-\w+)*            # words with optional internal hyphens
| \$?\d+(\.\d+)?%?      # currency and percentages, e.g. $12.40, 82%
| \#?\w+|\@?\w+         # hashtags and @ signs
| \.\.\.                # ellipsis
| [][.,;"'?()-_`]       # these are separate tokens
| ?:http://|www.)[^"\' ]+ # websites
'''

невозможно принять весь сайт как один токен:

print toks[:50]
['on', '#Seamonkey', '(', 'SM', ')', '-', 'I', 'had', 'a', 'short', 'chirp',   'exchange', 'with', '@angie1234p', 'at', 'the', '18thDec', ';', 'btw', 'SM', 'is', 'faster', 'has', 'also', 'an', 'agile', '...', '1', '/', '2', "'", '...', 'user', 'community', '-', 'http', ':', '/', '/', 'bit', '.', 'ly', '/', 'XnF5', '+', 'ICR', 'http', ':', '/', '/']

любая помощь очень ценится. Большое спасибо!

-Florie

1 Ответ

3 голосов
/ 07 октября 2011

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

>>> corpus = "this is a sentence. and another sentence. my homepage is http://test.com"
>>> nltk.regexp_tokenize(corpus, r"\S+")
['this', 'is', 'a', 'sentence.', 'and', 'another', 'sentence.', 'my', 'homepage', 'is', 'http://test.com']

, что эквивалентно:

>>> corpus.split()
['this', 'is', 'a', 'sentence.', 'and', 'another', 'sentence.', 'my', 'homepage', 'is', 'http://test.com']

другим подходом может быть использование функций nltk sent_tokenize () и nltk.word_tokenize ():

>>> sentences = nltk.sent_tokenize(corpus)
>>> sentences
['this is a sentence.', 'and another sentence.', 'my homepage is http://test.com']
>>> for sentence in sentences:
    print nltk.word_tokenize(sentence)
['this', 'is', 'a', 'sentence', '.']
['and', 'another', 'sentence', '.']
['my', 'homepage', 'is', 'http', ':', '//test.com']

, хотя, если ваш текст содержит много URL-адресов веб-сайтов, это может быть не лучшим выбором.информацию о различных токенизаторах в NLTK можно найти здесь .

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

nltk.regexp_tokenize(corpus, r'(http://|https://|www.)[^"\' ]+')

Надеюсь, это поможет.Если это был не тот ответ, который вы искали, пожалуйста, попробуйте немного более точно объяснить, что вы хотите сделать и как точно вы хотите, чтобы ваши токены выглядели (например, пример ввода / вывода, который вы хотели бы иметь), и мы можем помочьнайти правильное регулярное выражение.

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