请教一个正则表达式的问题,用来判断例句结尾。
比如以下面add词条为例,希望通过正则表达式提取出例句mp3文件名和英文例句。add
<link type="text/css" rel="stylesheet" href="LDAE5.css"/>
<div id="LDAE5_add_1"><span class="entry" id="add"><span class="entryhead"><span class="hwd">add</span><span class="hyphenation frequent">add</span> <proncodes><span class="neutral"> /</span><span class="pron">æd</span><span class="neutral">/</span></proncodes><span class="level"> ●●●</span><span class="pos"> verb</span><span class="gram"> </span> <a class="jp-play" href="sound://hwd/ame/a/ad1.mp3"><img src="img/spkr_b.png"></a><span class="buttons"><a class="popup-button" href="entry://@etymologies_u2fc098491a42200a.-5b7eb3a7.13b877f5061.-6775">Word Origin</a> <a class="popup-button" href="entry://@verbs_u2fc098491a42200a.-5b7eb3a7.13b877f5061.-6775">Verb Table</a> <a class="popup-button" href="entry://@collocations_add">Collocations</a> <a class="popup-button" href="entry://@thesaurus_add">Thesaurus</a> </span></span><span class="sense"><span class="sensenum">1</span><span class="def">to put something with something else, or with a group of other things</span><span class="neutral">: </span><span class="example"><a class="jp-play" href="sound://exa/ame/e/p032-000480813.mp3"><img src="img/spkr_g.png"></a> Continue mixing, then add flour.</span><span class="example"><a class="jp-play" href="sound://exa/ame/9/p032-000063988.mp3"><img src="img/spkr_g.png"></a> Do you want to <span class="colloinexa">add</span> your name <span class="colloinexa">to</span> the mailing list?</span></span><span class="sense"><span class="sensenum">2</span><span cat="math" class="topic"><span class="topic">math</span></span><span class="def"> to put numbers or amounts together and then calculate the total</span><span class="neutral">: </span><span class="example"><a class="jp-play" href="sound://exa/ame/a/p032-000064001.mp3"><img src="img/spkr_g.png"></a> If you add 5 and 3, you get 8.</span><span class="example"><a class="jp-play" href="sound://exa/ame/5/p032-000480814.mp3"><img src="img/spkr_g.png"></a> The interest will be added to your savings every six months.</span></span><span class="sense"><span class="sensenum">3</span><span class="def">to say something extra about what you have just said</span><span class="neutral">: </span><span class="example"><a class="jp-play" href="sound://exa/ame/1/p032-000064004.mp3"><img src="img/spkr_g.png"></a> The judge <span class="colloinexa">added that</span> this case was one of the worst she had ever tried.</span><span class="thesbox display" type="auto" id="add_s1"><span class="heading">THESAURUS</span><span class="section last"><span class="exponent inline" chosen="u2fc098491a42200a.-5b7eb3a7.13b877f5061.-675b"><span class="exp display">say</span></span><span class="exponent inline" chosen="u2fc098491a42200a.-5b7eb3a7.13b877f5061.-6759"><span class="neutral">, </span><span class="exp display">mention</span></span><span class="exponent inline" chosen="u2fc098491a42200a.-5b7eb3a7.13b877f5061.-6757"><span class="neutral">, </span><span class="exp display">state</span></span><span class="thesref"><span class="thesaurus">►</span> see <span class="thesaurus">thesaurus</span> at <a goto="say_1+say_1_s1"><span class="refhwd">say</span><span
通过观察可以看到(如下),文件名总是以.mp3结尾,很容易用正则判断出来。但是,例句就很麻烦了,尤其难以判断什么时候例句结束。可能是各种标点,也可能没有标点,而且中间存在的各种<span>也引起很多混乱。
<span class="example"><a class="jp-play" href="sound://exa/ame/e/p032-000480813.mp3"><img src="img/spkr_g.png"></a> Continue mixing, then add flour.</span><span class="example"><a class="jp-play" href="sound://exa/ame/9/p032-000063988.mp3"><img src="img/spkr_g.png"></a> Do you want to <span class="colloinexa">add</span> your name <span class="colloinexa">to</span> the mailing list?</span></span>
目前想到的笨办法就是先尽量把例句中嵌套的<span>删除,然后讲</a>和</span>之间认为是完整例句。但这种方法很容易遗漏和出错。
恳请指点,如何准确、简单地提出例句文本?非常感谢! 本帖最后由 LYX1692 于 2016-5-1 00:13 编辑
将每个例句以新行开头,<a>里的MP3,将它变成可显示的文字。如这样:
<span class="example" style="display:block">㊣【sound://exa/ame/e/p032-000480813.mp3】 Continue mixing, then add flour.</span><span class="example" style="display:block">㊣【sound://exa/ame/9/p032-000063988.mp3】 Do you want to <span class="colloinexa">add</span> your name <span class="colloinexa">to</span> the mailing list?</span></span>
然后,不需要再用源码处理了,保存为htm网页格式。
如果文件小,直接就用浏览器打开,复制粘贴。
如果文件有上百MB,浏览器可能打开困难,就算打开了,复制粘贴也可能出现内存不够等各种问题,取决于你的机器。
这里推荐TextForever这么个工具,它可以将大体积的网页转换为纯文本,转换出来的文本就是这样的:
㊣【sound://exa/ame/e/p032-000480813.mp3】Continue mixing, then add flour.
㊣【sound://exa/ame/9/p032-000063988.mp3】Do you want to add your name to the mailing list?
这是比较方便的方法。
(例句前面我用个“㊣”字,因为这样便于后面操作,^[^㊣]+$,这样就可以将所有不含㊣字符的行数一并清除,剩下有㊣字符的,就是你想要的。)
(PS. ^[^㊣]+$,这只是清除不含㊣字符的行内容,而不清除行。如要清楚行,可用 ^[^㊣]+\n。只是个人不喜欢直接删除行,因为我的机器一般,处理大文件时,直接删除不要的行较慢,反倒先清除行内容,再删除重复行比较快。)
正则也可以。
如果让我用正则,我就这么做。
1 将<span 替换为 <死笨;将</span>替换为</死笨>(提前确保文本中本身没有“死”“笨”两个字,看你的文本,应该是纯英文的。或者替换为其他字符也行。如:★☆※◆◇●○,我一般喜欢用一些少见的汉字,如“䗠臕䀀潴䌁䕴䯔囲媝”,就算是中文,出现的概率很小。当然,为防万一,我也会先检查下)
2 将 class="example" 替换为 class="㊣"(提前确保文本中本身没有“㊣”字符。)
3 然后正则查找: <死笨[^㊣|>]+>([^死]+)</死笨>
替换为:\1
(这正则的意思就是,将class非"example"的<span>,去掉标签首尾,只保留标签内容。多查找替换几次,直到没有符合条件的文件即可。)
4最后省下的就是class="example"即class="㊣"的<span>了。
5 当然,可能还有其他情况,如里面套的是<b>或者<i>标签等,这就看具体情况了。
(你这文本格式并不复杂,也可省略第1步,从第2步做起,然后第3步查找:<span[^㊣|>]+>([^<]+)</span>,替换为:\1)
(具体操作视你的具体情况而定,主要用到的知识就是如何用正则来表示“非”。[^㊣],就是非㊣的字符。[^㊣|★],就是就是非㊣也非★的字符。)
因为你只是要纯文本,我还是推荐一开始的方法,方便很多。 LYX1692 发表于 2016-4-30 23:06
将每个例句以新行开头,里的MP3,将它变成可显示的文字。如这样:
㊣【sound://exa/ame/e/p032-000480813. ...
太好了,大赞!
LYX1692 总是能给出最优方案!
把你的帖子汇总,可以出一本优秀的新手教程了! LYX1692 发表于 2016-4-30 23:06
将每个例句以新行开头,里的MP3,将它变成可显示的文字。如这样:
㊣【sound://exa/ame/e/p032-000480813. ...
两个方法都很巧妙!
节日快乐! LYX1692 发表于 2016-4-30 23:06
将每个例句以新行开头,里的MP3,将它变成可显示的文字。如这样:
㊣【sound://exa/ame/e/p032-000480813. ...
在用TextForever遇到个问题:
同样的htm文件,在chrome浏览器中显示很好,就是
㊣【sound://exa/ame/9/p032-000063988.mp3】Do you want to add your name to the mailing list?
这样的格式,例句文本在结尾自动断行,很清晰。
但是,经过TextForever转换的文本,则没有自动断行,例如是下面这样的格式:
㊣【sound://exa/ame/9/p032-000063988.mp3】Do you want to add your name to the mailing list?2math to put numbers or amounts together and then calculate the total:
似乎style="display:block"只在浏览器格式中有换行,在转换TextForever文本时被忽略了,没有换行。
用的TextForever中Html-Txt功能,采用了不同的设置,还是没能解决。再帮我看看好吗,多谢 werwer 发表于 2016-5-1 22:13
在用TextForever遇到个问题:
同样的htm文件,在chrome浏览器中显示很好,就是
试试在<span class="example"前面加<br />
再在<span class="sense">前面也加上<br /> LYX1692 发表于 2016-5-2 07:17
试试在
好的,谢谢,正在按照这个思路做。
不过Aboboo突然出了问题,txt批量导入句子,总是说指定文件不存在,之前可以导入的txt也不行了。
唉,心好累 不会用正则表达式 但可以分步提取
页:
[1]