2011-12-17 112 views
0

我試圖通過正則表達式將單詞串分割成單詞列表。我仍然是一個有正則表達式的初學者。包括標點符號在標點符號後分割字符串

我正在使用nltk.regex_tokenize,這是產生的結果是接近,但不是我想要的。

這是我到目前爲止有:

>>> import re, codecs, nltk 
>>> sentence = "détesté Rochard ! m'étais à... 'C'est hyper-cool.' :) :P"  
>>> pattern = r"""(?x) 
    #words with internal hyphens 
    | \w+(-\w+)* 
    #ellipsis 
    | \.\.\. 
    #other punctuation tokens 
    | [][.,;!?"'():-_`] 
    """ 
>>> nltk.regexp_tokenize(sentence.decode("utf8"), pattern) 
[u'd\xe9test\xe9', u'Rochard', u'!', u'm', u"'", u'\xe9tais', u'\xe0', u'qu', u"'", u'on', u'...', u"'", u'C', u"'", u'est', u'hyper-cool', u'.', u"'", u':', u')', u':', u'P'] 

我想有如下輸出:

[u'd\xe9test\xe9', u'Rochard', u'!', u"m'", u'\xe9tais', u'\xe0', u"qu'", u'on', u'...', u"'", u"C'", u'est', u'hyper-cool', u'.', u"'", u':)', u':P'] 

我對「表情符號」一種解決辦法,所以我」最關心的是引號。

回答

1

看來,所需的輸出與您的輸入句子

  1. [u"qu'", u'on']是一致的:我想不通從哪兒來這兩場比賽是從你的句子確定
  2. 爲什麼u'.'不是一部分的u'hyper-cool'(假設你想要的標點符號作爲單詞的一部分。
  3. 爲什麼u"'"不是的u"C'"一部分。(假設你想要的標點符號作爲單詞的一部分。

此外,如果你只是想正則表達式拆分,是否有任何理由爲什麼除了拆分線使用nltk?我沒有nltk的經驗,所以只會提出一個regex解決方案。

>>> sentence 
u"d\xe9test\xe9 Rochard ! m'\xe9tais \xe0... 'C'est hyper-cool.' :) :P" 
>>> pattern=re.compile(
    u"(" #Capturing Group 
    "(?:" #Non Capturing 
    "[\.\.\.\]\[\.,;\!\?\"\'\(\):-_`]?" #0-1 punctuation 
    "[\w\-]+"       #Alphanumeric Unicode Word with hypen 
    "[\.\.\.\]\[\.,;\!\?\"\'\(\):-_`]?" #0-1 punctuation 
    ")" 
    "|(?:[\.\.\.\]\[\.,;\!\?\"\'\(\):-_`]+)" #1- punctuation 
    ")",re.UNICODE) 
>>> pattern.findall(sentence) 
[u'd\xe9test\xe9', u'Rochard', u'!', u"m'", u'\xe9tais', u'\xe0.', u'..', u"'C'", u'est', u'hyper-cool.', u"'", u':)', u':P'] 

看看如果你需要捕獲組,非捕獲組,角色等級,統一匹配的更多信息這對你的作品

和的findall我建議你採取的re包粗略地看一眼的蟒蛇。 另外我不確定在這種情況下是否適合多行連續字符串。如果您需要更多有關跨行分割字符串的信息(不是多行字符串),請查看this

相關問題