免费注册 查看新帖 |

Chinaunix

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

求在当前目录多个文本文件中取出包含单词列表文件中各单词的前后行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-19 15:27 |只看该作者 |倒序浏览
本帖最后由 blackantt 于 2013-12-19 19:26 编辑

求在当前目录(为了可扩,能散放在子目录下最好)  的多个文本文件中  取出包含  单词列表文件newword.txt   中各单词的前后2句(或者n句)作为1行,然后写入ok.txt,格式为:   关键词 |  取到的内容    | 源文件名  .(内容里的关键词用[ 关键词 ] 标识)

当前文件目录有若干文本文件,每个里都是英语文章。(大小写交杂的,有可能是多行多段的文章,有可能是一句一行的例句)
a.txt      

I am Tom.I am eating an apple.It's delicus.there is a car boot sale.
   you can buy the apple as you wanted.really! I will go there.


bb.txt

   do you want to eat apple?
I don't know.
you need ask yourself
once I met a bear.because I was lost in forest. At last,I was safe.



z1111.txt

我有个生词列表文件 newword.txt,每个单词1行,如
apple
about
......
once

最终 ok.txt 类下

apple   | I am Tom.I am eating an [ apple ].It's delicus.there is a car boot sale.  |  a.txt
apple   | It's delicus.there is a car boot sale.   you can buy the [ apple ] as you wanted.really! I will go there.  | a.txt
...............................
once    |.....................[ once ]...............................................................|  bb.txt

目的是背完生词后,从语料库里取些生词的相关语句作阅读理解,加强记忆。

thanks

以下是示例文件

newword.zip (1.14 KB, 下载次数: 7)

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
2 [报告]
发表于 2013-12-19 15:48 |只看该作者
取出包含  单词列表文件newword.txt   中各单词的前后2行作为1行,
{:2_172:} 小伙伴们, 给个例子。

回复 1# blackantt


   

论坛徽章:
0
3 [报告]
发表于 2013-12-19 16:37 |只看该作者
回复 2# pitonas

   示例已放在附件里,thanks.  可能需要考虑哪些标点是分句的,哪些不是分句的。其实也无所谓。粗点就粗点,能用就行。

   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
4 [报告]
发表于 2013-12-19 16:45 |只看该作者
本帖最后由 pitonas 于 2013-12-19 09:49 编辑


{:2_172:} 小伙伴们,

前后2行 = 3 行 ? 4 行 ? 5 行 ?

回复 3# blackantt


   

论坛徽章:
0
5 [报告]
发表于 2013-12-19 19:30 |只看该作者
回复 4# pitonas

   多谢提醒,最好应该是前后2句吧(以英语的.!?做结的都算1句吧)。 主要是如果只取生词所在句,有时不好理解决。所以取它的前后2句,有个上下语境,更好理解一些。


   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
6 [报告]
发表于 2013-12-20 10:46 |只看该作者
{:2_169:}小伙伴们, 这个粗点, 如果你不满意,请告诉我
  1. #!/usr/bin/perl

  2. # READ ME!
  3. my $Dir     = '/xyz';
  4. # newword.txt and OK.txt in diffrent dir
  5. my $newword = '/abc/newword.txt';
  6. my $save    = '/abc/OK.txt';

  7. open my $dic, $newword or die $!;
  8. my %dic = map { s/\s*$//; $_, [] } <$dic>;
  9. my $word = join '|', keys %dic;
  10. my @word = keys %dic;

  11. sub findtxt {
  12.     my $dir = shift;
  13.     map { -d $_ ? findtxt($_) : /\.txt$/ ? $_ : () } glob "$dir/*";
  14. }

  15. for my $file ( findtxt $Dir) {
  16.     open my $f, $file or die $!;
  17.     my $data = do { local $/; <$f> };
  18.     $data =~ s/\s{2,}|\r?\n//g;
  19.     my ($fn) = $file =~ /(\w+\.txt)$/;
  20.     for my $w (@word) {
  21.         while ( $data =~
  22.             /\s*((?:[^\.]+\.){0,1}[^\.]*?$w[^\.]*?\.(?:[^\.]+\.){0,1})/ig )
  23.         {
  24.             my $string = $1;
  25.             $string =~ s/$w/[ $w ]/g;
  26.             push @{ $dic{$w} }, "$w\t| $string | $fn";
  27.         }
  28.     }
  29. }
  30. open my $S, '>', $save or die $!;
  31. while ( my ( $k, $v ) = each %dic ) {
  32.     next unless @$v;
  33.     print $S join( "\n\n", @$v ), "\n\n";
  34. }
复制代码

论坛徽章:
0
7 [报告]
发表于 2013-12-20 15:06 |只看该作者
学习 了,可以收录到cookbook

论坛徽章:
0
8 [报告]
发表于 2013-12-21 17:06 |只看该作者
本帖最后由 blackantt 于 2013-12-21 17:12 编辑

回复 6# pitonas

thanks for pitonas

这个已经很好用了,如果有时间的话,请再看一下。




1.原程序有点小问题,见附件 bug.jif

2.如果可以的话,再帮我把音标插到关键字与例句之间,形成一个对大家都有用的英语工具。

即最后结果象 ybxg.jpg

apple   /5Apl/  |  ....... This is an [ apple ]........| nce3.txt


音标文件 phonetic.txt (每行为 "单词  /音标/"的形式) ,及测试文件在附件里,

ok.zip (1.09 MB, 下载次数: 9)
   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
9 [报告]
发表于 2013-12-22 17:17 |只看该作者
本帖最后由 pitonas 于 2013-12-22 10:32 编辑

{:2_171:}小伙伴们, 0grade6.txt... 编码 UTF-16LE, 所以无法找到苹果
try
1: save all your files 编码 UTF-8
2: 试试你的所有文件转换为UTF-8

README !!
http://mocha-c-163-com.iteye.com/blog/583064
Change File Encoding to utf-8 via vim in a script
http://stackoverflow.com/questio ... via-vim-in-a-script

试试这个脚本? 小伙伴们, 如果你不满意,请告诉我
  1. #!/usr/bin/perl

  2. my $Dir  = '/xyz';

  3. # README! newword.txt 每行字後面没有空格
  4. my $newword = '/abc/newword.txt';
  5. my $phone   = '/abc/phonetic.txt';
  6. my $save    = '/abc/ok.txt';
  7. my $t       = qr/[^\.\?\!]/;
  8. my $e       = qr/[\.\?\!]/;

  9. open my $dic, $newword or die "$newword:\t$!";
  10. open my $pho, $phone   or die "$phone:\t$!";

  11. my %dic   = map { chomp; $_, [] } <$dic>;
  12. my @word  = keys %dic;
  13. my %phone = map @$_, grep $dic{ $_->[0] }, map [split], <$pho>;

  14. sub findtxt {
  15.     my $dir = shift;
  16.     map { -d $_ ? findtxt($_) : /\.txt$/ ? $_ : () } glob "$dir/*";
  17. }

  18. for my $file ( findtxt $Dir) {
  19.     print "$file\n";
  20.     open my $f, $file or die "$file:\t$!";
  21.     my $data = do { local $/; <$f> };
  22.     $data =~ s/[\r\n]|\s{2,}/ /g;
  23.     for my $w (@word) {
  24.         next unless $data =~ /\b$w/i;
  25.         while ( $data =~
  26.             /\s*\|?\s*((?:$t*?$e){0,1}$t*?\b($w\w*)$t*?$e(?:$t*?$e){0,1})/ig )
  27.         {
  28.             my $string = $1;
  29.             my $w2     = $2;
  30.             $string =~ s/\b$w2/[ $w2 ]/ig;
  31.             push @{ $dic{$w} }, "$w $phone{$w}\n$string\n# $file";
  32.         }
  33.     }
  34. }

  35. open my $S, '>', $save or die "$save:\t$!";
  36. for my $k ( sort keys %dic ) {
  37.     next unless @{ $dic{$k} };
  38.     print $S join( "\n\n", @{ $dic{$k} } ), "\n\n";
  39. }
复制代码

论坛徽章:
0
10 [报告]
发表于 2013-12-22 23:17 |只看该作者
回复 9# pitonas

thanks to pitonas

非常满意,呵呵。谢谢。


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP