再说Mdx的字典文件处理

再说Mdx的字典文件处理

上次说了Mdx的字典文件的处理并不难,难的是出现个例就是麻烦事。如音标的处理。在《21英汉大词曲》里的音标用方括号来标识。但在这本词典里,用方括号的还不止这一种,还有别的如“[口语]”、“[美国英语]”、“[俚语]”等等,在EmEditor里查找:\[[^一-龥]{0,50}\]可以查找所有的音标,但第一个就出例外了。第一个是 a [强ei,弱ə]就是例外。还有多少个例外呢?

就《21英汉大词曲》而言,经过粗略的整理,呈下图中的格式:

图一

第一种,单词+Tab+单词+1……

第二种,单词+Tab+单词+词性.1……

第三种,单词+Tab+单词+音标+1……

第四种,单词+Tab+单词+音标+词性.1……

但作为一个三维数据表,我需要的是这样

图二

所以,很多的努力都是要把图一的柱子变成图二。

用emEditor来做,方便是方便,就怕出现例外。实际上也确实存在例外。以至于到现在为止我的词典数据都是残缺的。为什么残缺?就是因为出现了例外。好在例外毕竟是少数,也就将就用了。

……

有时候,灵感远比技术值钱得多。一旦灵感来了,技术就是小菜一碟

所有的mdx字典文件都有一个特点,就是主单词(或被查询词)后面都有一个Tab,这为做成二维数据表提供了极大的方便。

将mdx文件稍作处理后,成下面图三的样子:

图三

保存好退出。

用Access导入。为什么要用Access导入成数据表?过程中发现,从TXT文本导入数据表,Access比Sql Server好用。所以要过度一下。

成功后再导入到SQL

图四

因为要把F2里与F1相同的内容处理掉,用replace()函数。但不能直接用。为什么?还是怕出现例外。比如说,主单词是abandon,

图五

看到在abandon这个词条里有那么多个abandon,如果现在用replace(),就会把所有的abandon都替换掉了。上面说的灵感来了!就是把词条中的第二个abandon再加上几个字符放到字段F3里。

update [GYYQ].[dbo].[21世纪大英汉词典]

set f3=left(f2,len(f1)+5)

先查询一下看看结果:

图六

对!要的就是图六的这个效果。

接下去要把F2中与F3相同内容的部分去掉,等处理完后再加回来。

update [GYYQ].[dbo].[21世纪大英汉词典]

set f2=replace(F2,F3,'')

结果如图七

图八

这时候就可以把F3中与F1相同的内容替换掉了。

update [GYYQ].[dbo].[21世纪大英汉词典]

set f3=replace(F3,F1,'')

处理好的如下图:

图九

再把处理好的内容加回到F2

图十

这就是想要的格式了。不过还差一步,要把音标抽出来。所以,再次把F3替换成Null备用。

注意:SQL的Charindex()函数查找的位置是字段中第一个出现的位置。现在要把音标抽出来,就要定位字段F2中第一个出现“]”的位置,即:Charindex(‘)’,F2)。但这样就把所有的“]”都定位出来了。

图十一

很显然,图十一不是想要的结果。

观察F2目前的数据,看到那些有音标的词条都以“[”开头。但在SQL里,where f2 like ‘[%’ 是不行的。需要一个转义,即

where f2  like '/[%' escape '/'

图十二

这才是想要的结果。

update [GYYQ].[dbo].[21世纪大英汉词典]

set f3=left(f2,charindex(']',f2))

where f2  like '/[%' escape '/'

图十三

接近尾声了!还差最后一步,就是用F3的内容去年F2里相同的,即把现在F2中的音标去掉。

大功告成!

图十四

至于其它如把变形词抽出来,那是另一个需要解决的问题了。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值