我需要一个字符串,并将其缩短为140个字符。
目前我正在做:
if len(tweet) > 140:
tweet = re.sub(r"\s+", " ", tweet) #normalize space
footer = "… " + utils.shorten_urls(post['url'])
avail = 140 - len(footer)
words = tweet.split()
result = ""
for word in words:
word += " "
if len(word) > avail:
break
result += word
avail -= len(word)
tweet = (result + footer).strip()
assert len(tweet) <= 140
因此,这对于英语和类似英语的字符串非常有效,但对于中文字符串则失败,因为tweet.split()
只返回一个数组:
>>> s = u"简讯:新華社報道,美國總統奧巴馬乘坐的「空軍一號」專機晚上10時42分進入上海空域,預計約30分鐘後抵達浦東國際機場,開展他上任後首次訪華之旅。"
>>> s
u'\u7b80\u8baf\uff1a\u65b0\u83ef\u793e\u5831\u9053\uff0c\u7f8e\u570b\u7e3d\u7d71\u5967\u5df4\u99ac\u4e58\u5750\u7684\u300c\u7a7a\u8ecd\u4e00\u865f\u300d\u5c08\u6a5f\u665a\u4e0a10\u664242\u5206\u9032\u5165\u4e0a\u6d77\u7a7a\u57df\uff0c\u9810\u8a08\u7d0430\u5206\u9418\u5f8c\u62b5\u9054\u6d66\u6771\u570b\u969b\u6a5f\u5834\uff0c\u958b\u5c55\u4ed6\u4e0a\u4efb\u5f8c\u9996\u6b21\u8a2a\u83ef\u4e4b\u65c5\u3002'
>>> s.split()
[u'\u7b80\u8baf\uff1a\u65b0\u83ef\u793e\u5831\u9053\uff0c\u7f8e\u570b\u7e3d\u7d71\u5967\u5df4\u99ac\u4e58\u5750\u7684\u300c\u7a7a\u8ecd\u4e00\u865f\u300d\u5c08\u6a5f\u665a\u4e0a10\u664242\u5206\u9032\u5165\u4e0a\u6d77\u7a7a\u57df\uff0c\u9810\u8a08\u7d0430\u5206\u9418\u5f8c\u62b5\u9054\u6d66\u6771\u570b\u969b\u6a5f\u5834\uff0c\u958b\u5c55\u4ed6\u4e0a\u4efb\u5f8c\u9996\u6b21\u8a2a\u83ef\u4e4b\u65c5\u3002']
我该怎么做才能处理I18N?这在所有语言中都有意义吗?
如果这很重要的话,我将使用Python2.5.4。
汉语中的词之间通常没有空格,符号根据上下文的不同可以有不同的含义。你必须理解这段文字,才能把它分割成一个词的边界。换言之,你要做的事一般来说并不容易。
对于中文分词和处理自然语言的其他高级任务,如果不是一个完整的解决方案,可以考虑将NLTK作为一个良好的起点——它是一个基于Python的丰富的工具包,特别适合学习NL处理技术(而且很少有好到可以为您提供解决这些问题的可行方案)。
^{} flag 将根据Unicode字符属性数据库处理
\s
。但是,根据python的unicode数据库,给定的字符串显然不包含任何空格字符:
相关问题 更多 >
编程相关推荐