1. 要求:

给定一篇纯英文的文本,统计其中回文单词的比列,并输出其中的回文单词,文本数据如下:

This is Everyday Grammar. I am Madam Lucija
And I am Kaveh. Why the title, Lucija?
Well, it is a special word. Madam?
Yeah, maybe I should spell it for you forward or backward?
I am lost. The word Madam is a Palindrome.
I just learned about them the other day and I am having a lot of fun!
Palindrome, huh? Let me try!
But first, we need to explain what a Palindrome is.
That is easy! Palindromes are words, phrases or numbers that read the same back and forward, like DAD.
So, Palindromes can be serious or just silly.
Yup, like, A nut for a jar of tuna.
Or, Borrow or Rob. Probably borrow!
And if you are hungry, you can always have a Taco cat?
That is gross. What about this one?
A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal panama!
That is a real tongue twister. But I prefer Italy. Amore Roma!
So how do we make palindromes?
One, read words backwards and see if they make sense.
Two, try to make palindromes where even the spacing between words is consistent. Like, NotATon.
And three, you can always check the internet for great palindromes!
And that is Everyday Grammar.

注意:

  • 区分单词的大小写,即同一个单词的大写和小写视为不同的单词;

2. 分析

本次任务的思路很简单,基本步骤如下:

  • 第一步:读入文本数据,然后去掉文本中的换行符;
  • 第二步:去掉第一步处理后的文本中的标点符号,这里使用正则表达式将文本中的单词保留,从而达到去标点符号的目的。之后使用一个列表存入每一行去掉标点之后的文本。
  • 第三步:根据预处理之后的文本统计词频,因为一篇文本里面可能有很多重复的单词,那么只须判断文本构成的子典中的单词是否是回文单词即可。
  • 第四步:遍历字典中的键,并判断是否是回文单词,具体实现方法见代码;
  • 第五步:根据找到的回文单词计算文本中回文单词的比例;

3. 代码

import re
from collections import Counter # 文本预处理,返回值为['This', 'is', 'Everyday']这种形式
def process(path):
token = []
with open(path, 'r') as f:
text = f.readlines()
for row_text in text:
row_text_prod = row_text.rstrip('\n')
row_text_prod = re.findall(r'\b\w+\b', row_text_prod)
token = token + row_text_prod
return token # 统计回文单词
def palindrome(processed_text):
c = Counter(processed_text) # 词频字典
palindrome_word = [] # 回文单词列表
not_palindrome_word = [] # 非回文单词列表
# 遍历词频字典
for word in c.keys():
flag = True
i, j = 0, len(word)-1
# 判断是否是回文单词
while i < j:
if word[i] != word[j]:
not_palindrome_word.append(word) # 不是回文单词
flag = False
break
i += 1
j -= 1
if flag:
palindrome_word.append(word) # 是回文单词
print("回文单词:")
print(palindrome_word)
print("非回文单词:")
print(not_palindrome_word)
# 统计回文单词的比率
total_palindrome_word = 0
for word in palindrome_word:
total_palindrome_word += c[word]
print("回文单词的比例为:{:.3f}".format(total_palindrome_word / len(processed_text))) def main():
text_path = 'test.txt'
processed_text = process(text_path)
palindrome(processed_text) if __name__ == '__main__':
main()

reference:

python3小技巧之:妙用string.punctuation

回文字符串(Palindromic_String)

python统计英文文本中的回文单词数的更多相关文章

  1. python统计一个文本中重复行数的方法

    python统计一个文本中重复行数的方法 这篇文章主要介绍了python统计一个文本中重复行数的方法,涉及针对Python中dict对象的使用及相关本文的操作,具有一定的借鉴价值,需要的朋友可以参考下 ...

  2. C#统计英文文本中的单词数并排序

    思路如下:1.使用的Hashtable(高效)集合,记录每个单词出现的次数2.采用ArrayList对Hashtable中的Keys按字母序排列3.排序使用插入排序(稳定) public void S ...

  3. 翻译器DIY它———算在英文文本中的单词数,字符和行数

    咳咳.这部分应该是序列化编译器DIY的,然而,在这样做DIY第一次使用前flex 为了练练手,对于后者的理解是有帮助. 在word 我经常看到一个字计数功能,因此,它是如何实现,当然,首先想到的是要经 ...

  4. 统计英文文章中各单词的频率,打印频率最高的十个单词(C语言实现)

     一.程序思路及相关代码 首先打开文件,代码如下 FILE *fp; char fname[10]; printf("请输入要分析的文件名:\n"); scanf("%s ...

  5. Python:判断文本中的用户名在数据库中是否存在,存在返回1,不存在返回0

    下面是我写的python的一个小脚本,作用是:判断文本中的用户名在数据库中是否存在,存在返回1,不存在返回0.用的是MySQL数据库. 要注意的是:strip函数的使用,该函数的作用是去除字符串两端多 ...

  6. 【python实例】判断是否是回文数

    """ 输入一个数,判断一个这个数是否是回文数.例如:121,这个数反过来还是121,所以这个是回文数: 再如:134,这个数反过来是431,所以这不是一个回文数: 12 ...

  7. python 统计工作簿中每个人名出现的次数

    工作簿 需求:统计人名出现的次数 代码: # coding=gbk import pandas as pd import re def extract_chinese(txt): pattern = ...

  8. WordCount C语言实现求文本的字符数,单词数,行数

    1.码云地址: https://gitee.com/miaomiaobobo/WordCount 2.psp表格 PSP2.1表格 PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) P ...

  9. Python统计excel表格中文本的词频,生成词云图片

    import xlrd import jieba import pymysql import matplotlib.pylab as plt from wordcloud import WordClo ...

随机推荐

  1. [html]浏览器标签小图标LOGO简单设置

    方式一:如果是一个项目一个LOGO 的话,直接接把图片像素设置成16x16像素,然后改名favicon.ico放在项目根部目录就可以,自动识别的! 方式二:简单设置! 首先找一个图片把像素设置成16x ...

  2. 用functools.lru_cache实现Python的Memoization

    现在你已经看到了如何自己实现一个memoization函数,我会告诉你,你可以使用Python的functools.lru_cache装饰器来获得相同的结果,以增加方便性. 我最喜欢Python的原因 ...

  3. Python神库分享之geoip2 IP定位库

    先安装这两个 pip install python-geoip-geolite2 -i https://pypi.douban.com/simple pip install geoip2 然后下载资源 ...

  4. pytorch torchversion标准化数据

     新旧标准差的关系

  5. 一张图记住Linux系统常用诊断工具

  6. linux内核第一宏 container_of

    内核第一宏 list_entry()有着内核第一宏的美称,它被设计用来通过结构体成员的指针来返回结构体的指针.现在就让我们通过一步步的分析,来揭开它的神秘面纱,感受内核第一宏设计的精妙之处. 整理分析 ...

  7. 【Django 2.2文档系列】Model 外键中的on_delete参数用法

    场景 我们用Django的Model时,有时候需要关联外键.关联外键时,参数:on_delete的几个配置选项到底是干嘛的呢,你知道吗? 参数介绍 models.CASCADE 级联删除.Django ...

  8. cocos2dx初体验

    我们创建工程后总会自带一个HelloWorld类,短短的几行代码就出来了一个游戏的雏形,请问我们真的理解它了吗?如果我们能早一点弄明白这几行代码,我们或许会比现在走得更远. 理解HelloWorld类 ...

  9. 增量学习不只有finetune,三星AI提出增量式少样本目标检测算法ONCE | CVPR 2020

    论文提出增量式少样本目标检测算法ONCE,与主流的少样本目标检测算法不太一样,目前很多性能高的方法大都基于比对的方式进行有目标的检测,并且需要大量的数据进行模型训练再应用到新类中,要检测所有的类别则需 ...

  10. 部署企业LNMP架构搭建bbs

    部署企业LNMP架构 1===============部署Nginx 2===============安装及部署Mysql数据库 3===============安装PHP解析环境 4======== ...