我正在寫一段代碼,它將從正在運行的文本中提取單詞。這個文本可以包含\ r,\ n等分隔符,這些分隔符可能在文本中。使用Python分割運行文本中的單詞?
我想丟棄所有這些分隔符,只提取完整的單詞。我如何用Python做到這一點?任何可用於在python中處理文本的庫?
我正在寫一段代碼,它將從正在運行的文本中提取單詞。這個文本可以包含\ r,\ n等分隔符,這些分隔符可能在文本中。使用Python分割運行文本中的單詞?
我想丟棄所有這些分隔符,只提取完整的單詞。我如何用Python做到這一點?任何可用於在python中處理文本的庫?
假設你的「字」的定義與正則表達式模塊(re
)的同意,也就是說,字母,數字和下劃線,很容易:
import re
fullwords = re.findall(r'\w+', thetext)
其中thetext
是有問題的字符串(例如,來自文件對象f
的f.read()
開放閱讀,如果這是你從中獲取文本的地方)。
如果你以不同的方式定義單詞(例如,你想包含撇號,例如「它的」將被視爲「一個單詞」),它並不難 - 僅僅用作第一個參數findall
適當的模式,例如r"[\w']+"
爲撇號情況。
如果你需要非常,非常複雜(例如,處理使用的單詞之間沒有中斷語言),那麼問題突然變得更難,你會需要一些第三方包狀nltk。
假設你的分隔符是空白字符(空格等\r
和\n
),則基本str.split()
你想要做什麼:
>>> "asdf\nfoo\r\nbar too\tbaz".split()
['asdf', 'foo', 'bar', 'too', 'baz']
如果可以考慮將_every_標點符號作爲它所涉及的「單詞」的一部分,是的,但是這在實際應用程序中並不是一個非常頻繁的用例(例如,解析這個註釋,您不會看到'「觸動「,」用逗號作爲「一個單詞」來完成;-)。 – 2010-07-03 17:33:31
@Alex Martelli:是的,關於標點符號的好處,但是從這個問題來看,它是否有必要是不明確的 - 定界符的例子都是空格。 OTOH,用這個詞保留某些標點符號可能很重要(例如'$',' - ','%'...)。我不同意這不是一個常見的用例,但它依賴於你正在構建的東西 - 拆分表格輸出是一回事,解析自然語言是另一回事:) – Stephen 2010-07-03 17:38:46
謝謝!這真的幫助我解決了這個問題。我看了一下nltk,但不幸的是,由於C庫安裝依賴關係,我無法將它與Google App Engine結合使用。 – demos 2010-07-03 17:45:12