免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4390 | 回复: 7
打印 上一主题 下一主题

如何用Perl找到包括同样字母的单词 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-07 10:12 |只看该作者 |倒序浏览
本帖最后由 molliechan 于 2014-05-07 10:20 编辑

我想用perl 找到包括同样字母的所有单词(或组合) 。
比如:Mary  找到 army; amry; amyr; mray;mayr; mrya ..... 在这个例子中就是把字母m, a, r, y 打乱顺序重新排列成一个组合。
考虑到 一个英文单词有两个字母以上(包括两个字母的),它的字母都会有不同的组合, 能不能用perl 写个code 找出一片文章中包括同样字母的所有单词(或组合) 。
如果我没说清楚,请留言,请见谅,我再解释:)谢谢大家帮忙!

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2014-05-07 11:21 |只看该作者
回复 1# molliechan

1.多问少回,非礼也
  白手起家
  帖子    5
  主题    4

2. data
input data
output data
how to procedure or get the answer

论坛徽章:
0
3 [报告]
发表于 2014-05-07 16:42 |只看该作者
  1. #!/usr/bin/perl
  2. use 5.018;

  3. sub search {
  4.     my $file = shift;
  5.     sub {
  6.         my ( $word, %chars, %group ) = shift;
  7.         @chars{ map lc, split //, $word } = ();
  8.         my @chars = keys %chars;

  9.         for my $line (@$file) {
  10.             my @words = $line =~ /\w+/g;
  11.             for my $WORD (@words) {
  12.                 my $word = lc $WORD;
  13.                 next if $word =~ /[^@chars]/;
  14.                 my %check;
  15.                 @check{ split //, $word } = ();
  16.                 $group{$WORD}++ if keys %check == @chars;
  17.             }
  18.         }
  19.         my @group = keys %group;
  20.         @group ? @group : "[ $word: No Results Found ]";
  21.       }
  22. }

  23. my $file   = [<DATA>];
  24. my $google = search $file;

  25. my @mary = $google->('mary');
  26. say join ', ', @mary;

  27. my @lego = $google->('lego');
  28. say join ', ', @lego;

  29. __DATA__
  30. Cat act, python thypoon, thytoon action?
  31. God said: This Dog is a Good Dog!
  32. Mary, Larry, Henry, Ramy, Raramy and Rammy army go ray.


  33. Weith ACT: "white wieth"!
  34. write "google, lego, gole goel leo loge"...
  35. Pugool, GOOGLES, geelog, gelleo.
  36. loogee loople
复制代码

论坛徽章:
0
4 [报告]
发表于 2014-05-07 23:30 |只看该作者
谢谢你的回复。因为刚刚开始学习perl,还没太多能力能解决问题 。我努力学,希望能有能力多回复!

回复 2# jason680


   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2014-05-08 00:49 |只看该作者
回复 1# molliechan


    把每个单词中的字母排下序,然后再比较不就行了?

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
6 [报告]
发表于 2014-05-08 09:56 |只看该作者
貌似可以抽象成一个聚类问题。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [报告]
发表于 2014-05-08 11:18 |只看该作者
回复 4# molliechan

只问不回,非礼也.
http://bbs.chinaunix.net/thread-4125538-1-1.html
   

论坛徽章:
0
8 [报告]
发表于 2014-05-08 14:23 |只看该作者
谢谢提醒,下次注意 回复 7# jason680


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP