如何从输出中删除除字母之外的其他字符的行?

时间:2017-04-21 09:08:45

标签: python python-2.7 python-3.x

我有一个代码,我从大型语料库中提取bigrams,并连接/合并它们以获得unigrams。 '可能','是' - >也许。当然,语料库包含很多标点符号,但我也发现它包含其他字符,例如表情符号...我的计划是将标点符号放在列表中,如果这些字符不在一行中,则打印该行。也许我应该改变我的方法,只打印只包含字母而没有其他字符的行,因为我不知道语料库中有哪些字符。如何才能做到这一点?我确实需要在代码的第一部分保留这些其他字符,以便打印实际不存在的双字母组。我的代码的最后一行是目前:

    counted = collections.Counter(grams)
    for gram, count in sorted(counted.items()):
        s = ''
        print (s.join(gram))

我得到的输出是:

   !aku
   !bet
   !brå
   !båda

这些线对我来说没有任何用处...非常感谢一些帮助! :)

4 个答案:

答案 0 :(得分:3)

如果您想检查每个字符串是否只包含字母,您可以使用isalpha() method

>>> '!båda'.isalpha()
False
>>> 'båda'.isalpha()
True

从示例中可以看出,此方法应识别任何unicode字母,而不仅仅是ascii。

答案 1 :(得分:2)

要过滤掉包含非字母字符的字符串,代码可以检查每个字符串中是否存在非字母字符:

# coding=utf-8

import string
import unicodedata

source_strings = [u'aku', u'bet', u'brå', u'båda', u'!båda']

valid_chars = (set(string.ascii_letters))

valid_strings = [s for s in source_strings if 
                 set(unicodedata.normalize('NFKD', s).encode('ascii', 'ignore')) <= valid_chars]
# valid_strings == [u'aku', u'bet', u'brå', u'båda']
# "båda" was not included.

答案 2 :(得分:0)

您可以使用unicodedata module对字符进行分类:

import unicodedata

unigram= ''.join(gram)
if all(unicodedata.category(char)=='Ll' for char in unigram):
    print(unigram)

答案 3 :(得分:0)

如果您想从行中删除一些字符,那么您可以在编辑之前轻松替换您的行:

sourceList = ['!aku', '!bet', '!brå', '!båda']
newList = []
for word in sourceList:
    for special in ['!','&','å']:
        word = word.replace(special,'') 
    newList.append(word)

然后你可以做你的二元运动所需要的东西。希望这有帮助。

第二个查询:如果你的字符串上有很多字符,你可以使用isalpha():

sourceList = ['!aku', '!bet', 'nor mal alpha', '!brå', '!båda']
newList = [word for word in sourceList if word.isalpha()]

在这种情况下,您只会检查字符。希望这澄清第二个问题。