使用Python查找稀有字符

使用Python查找稀有字符,python,algorithm,python-2.7,python-3.x,Python,Algorithm,Python 2.7,Python 3.x,假设我有一个巨大的.txt文件,里面充满了随机字符,我想找出一些罕见的字符。是否有一些模块,实际上可能是Python版本3.x,但我还有一台使用Python2.7的机器,以防它更好地用于此目的?如果答案是肯定的,我在哪里可以找到关于其功能的一些基本解释? 多谢各位 from collections import Counter c = Counter("text") print(c.most_common()) 输出 [('t', 2), ('e', 1), ('x', 1)] 输出 [(

假设我有一个巨大的.txt文件,里面充满了随机字符,我想找出一些罕见的字符。是否有一些模块,实际上可能是Python版本3.x,但我还有一台使用Python2.7的机器,以防它更好地用于此目的?如果答案是肯定的,我在哪里可以找到关于其功能的一些基本解释? 多谢各位

from collections import Counter

c = Counter("text")
print(c.most_common())
输出

[('t', 2), ('e', 1), ('x', 1)]
输出

[('t', 2), ('e', 1), ('x', 1)]
然后您可以使用d搜索最小字母数


然后您可以使用d来搜索最小字母。

这里有一种方法,使用计数器字典。它将打印罕见字符及其出现次数。我们将稀有字符定义为其出现次数小于某个阈值的字符,该阈值是平均出现次数乘以权重因子,在本例中,我将其设置为0.5

from collections import Counter

with open(fname, 'r') as f:
    text = f.read()

counter = Counter(text)
mean = len(text) / len(counter)
print('Mean:', mean)

weight = 0.5
thresh = mean * weight
print('Threshold:', thresh)

#Only print results for chars whose occurence is less than the threshold
for ch, count in reversed(counter.most_common()):
    if count <= thresh:
        print('{0!r}: {1}'.format(ch, count))
    else:
        break

如果这是一个实际的文本文件,您可能希望过滤掉某些字符,例如换行符和空格。

这里有一种方法,使用计数器字典。它将打印罕见字符及其出现次数。我们将稀有字符定义为其出现次数小于某个阈值的字符,该阈值是平均出现次数乘以权重因子,在本例中,我将其设置为0.5

from collections import Counter

with open(fname, 'r') as f:
    text = f.read()

counter = Counter(text)
mean = len(text) / len(counter)
print('Mean:', mean)

weight = 0.5
thresh = mean * weight
print('Threshold:', thresh)

#Only print results for chars whose occurence is less than the threshold
for ch, count in reversed(counter.most_common()):
    if count <= thresh:
        print('{0!r}: {1}'.format(ch, count))
    else:
        break
如果这是一个实际的文本文件,您可能希望过滤掉某些字符,例如换行符和空格。

使用集合选项访问n个最不常见的元素c.most_common[:-n-1:-1]

结果:

The 3 Rarest characters are: l , g and k
使用集合选项访问n个最不常见元素c.most_common[:-n-1:-1]

结果:

The 3 Rarest characters are: l , g and k

要在文本中查找10个最稀有的字符,请执行以下操作:

from collections import Counter

rarest_chars = Counter(text).most_common()[-10:]
为了简单起见,这里的字符表示Unicode码点:它表示a和a被视为不同的字符。这意味着u'g̉'u+0067 u+0308被视为两个字符。请参阅相关问题中如何处理这些问题:


counter.most_common[-10:]可以使用以下方法更有效地写入:。items返回pairs字符及其计数并提取计数,以便返回计数最少的10对。

要在文本中查找10个最罕见的字符:

from collections import Counter

rarest_chars = Counter(text).most_common()[-10:]
为了简单起见,这里的字符表示Unicode码点:它表示a和a被视为不同的字符。这意味着u'g̉'u+0067 u+0308被视为两个字符。请参阅相关问题中如何处理这些问题:



counter.most_common[-10:]可以使用以下方法更有效地编写:。items返回pairs字符、其_计数并提取计数,以便返回计数最少的10对。

对于罕见的,您的意思是计数较低?这可能太多,但您可以使用scipy模块进行一些统计分析。我自己没有使用过,但据我所知,它应该包含您需要的功能。它在Python3.x和2.x上运行正常。@Jason:Jeah,实际上我的意思是:它们的平均出现次数明显低于其他字符。谢谢你的阅读!你可以试试这个模块。这将获取每个字符的计数。剩下的计算你得自己做。谢谢你们两位提出的有趣的建议,我将试着从这里开始找出一个解决方案!你们所说的“稀有”是指数量少?这可能太多了,但你们可以使用scipy模块来做一些统计分析。我自己没有使用过,但据我所知,它应该包含您需要的功能。它在Python3.x和2.x上运行正常。@Jason:Jeah,实际上我的意思是:它们的平均出现次数明显低于其他字符。谢谢你的阅读!你可以试试这个模块。这将获取每个字符的计数。剩下的计算你得自己做。谢谢你们两位提出的有趣的建议,我将试着从这里开始找出一个解决方案!OP要求的是稀有的,不是最普通的。@Duncan只是颠倒列表。@Duncan他们是相等的,只是顺序不同。我知道,只要认为答案不完整,除非它真的说出来。@Duncan:最稀有的字符是:c.most_common[-1]。OP要求的是稀有的,不是最普通的。@Duncan只是颠倒列表。@Duncan他们是相等的,只是顺序不同。我知道,除非答案真的这么说,否则我认为答案是不完整的。@Duncan:最罕见的字符是:c.most_common[-1]。为什么要对排序列表进行排序?我是根据事件的数值而不是字母进行排序。1-。most_common已经返回了按事件数排序的对,例如。,.most_common[-1]是最稀有的字符-无需调用其他排序,即可获得2个最稀有的字符。2-可以使用operator.itemgetter1而不是定义Occurse函数3-所有字符串都是ByTestRing。处理文本时应使用Unicode。4-我的意思是:字符串在代码中是bytestring,应该使用Unicode字符串。@J.F.Sebas
tian更改为充分利用集合模块的功能为什么对排序列表进行排序?我根据出现的数值而不是字母进行排序。1-。most_common已返回按出现次数排序的对,例如。most_common[-1]是最罕见的字符-无需调用其他排序,获得2个最稀有的字符。2-可以使用operator.itemgetter1而不是定义Occurse函数3-所有字符串都是ByTestRing。处理文本时应使用Unicode。4-我的意思是:字符串在代码中是bytestring,您应该使用Unicode字符串。@J.F.Sebastian经过修改以充分利用集合模块的功能