首页 > Mathematica > Mathematica在WordPress搬家中的运用。。

Mathematica在WordPress搬家中的运用。。

2013年12月26日 发表评论 阅读评论

标题想了半天,也不知道用什么好。。就这样了。。

其实之前在搬家过来第一篇博文中提到过这么一回事,说要写一篇,然后最近写Euler Project写傻了,把这事给忘了。。orz。。。

其实也就屁大点事,旧博客那边很多资源(歌&图片那些)都是中文命名的,尤其很多图表我都是在Matlab里面生成,然后QQ截图的,所以一般图片名称就是“QQ截图20131021213122.png”这种,然后用了个方法把旧站那边的图片爬下来后,传上这边的Wordpress,居然失败了一片,研究了一下,发现 WordPress里面URL不能有中文,囧,考虑到图片超多,1200+张,不可能自己手改,于是乎,就随手写了个Mathematica小段代码,功能就是找出文章中所有旧站的URL,先将其重命名,比如说是:QQ截图20131021213122.png就变成QQjietu20131021213122.png,然后再将博文中所有的URL链接改了,比如说将

kylen314.blog.com/files/2013/10/QQ截图20131021213122.png

变成:

kylen314.com/wp-content/uploads/2013/10/QQjietu20131021213122.png


首先转换拼音就是用很久之前写过的这个文件;然后利用txt的查找替换功能将其改成下面这个样子,这样很适合用Mathematica的Table导入:

阿啊 a
哎哀唉埃挨皑癌矮蔼艾爱隘碍 ai
安氨鞍俺岸按案胺暗 an
肮昂盎 ang
凹敖熬翱袄傲奥澳懊 ao
八巴叭扒吧芭疤捌笆拔跋把靶坝爸罢霸 ba
白百佰柏摆败拜稗 bai
扳班般颁斑搬板版办半伴扮拌绊瓣 ban
...

然后就是下面这段接口读取这个文件来翻译:

pinyin = Import["pinyin.txt", "Table", CharacterEncoding -> "CP936"];

findpinyin[hanzi_, pinyin_] := Block[{},
  k = Select[pinyin, Length[StringCases[#[[1]], hanzi]] >= 1 &];
  If[Length[k] != 0, k[[1, 2]], hanzi]
  ]

fanyi[str_, pinyin_] := StringJoin[findpinyin[#, pinyin] & /@ Characters[str]]

调用fanyi这个函数就可以把“截图”变成“jietu”了;

然后接下来我一直干的事情就是把要转换的博文的html复制到一个文件ori_blog.txt中,用Mathematica读取:

blogtext = 
  Import["ori_blog.txt", "text", CharacterEncoding -> "CP936"];

然后用正则表达式找出这里面的URL:

pictxt  = Union[StringCases[blogtext, RegularExpression[
    "http://kylen314.blog.com/files/((?!http://).)+?\\.(jpg|gif|png|\jpeg|bmp|mp3)"]], 
    SameTest -> (StringMatchQ[#1, #2] &)]

然后在我爬下来的全部图片歌曲里面,将这片文章里面用到的资源,也就是上一行的返回结果,复制出来到一个叫做pic的文件夹,当然这中间还包括拼音重命名的过程:

CopyFile["F:\\建站图片\\" <> #, 
    "pic\\"<>fanyi[#, pinyin]] & /@ (Last[#] & /@ (StringSplit[#, "/"] & /@ pictxt));

然后就可以直接把这部分图片和歌曲上传到博客里面去了;这样就保证了这一些东西的URL里面年份和月份和旧博客那边一样;


之后就是替换博文里面所有的URL:

newblog = 
  StringReplace[blogtext, 
   Function[kk, 
     Thread[kk -> 
       Table[StringCases[kk[[i]], 
            "http://kylen314.blog.com/files/" ~~ (year:DigitCharacter..) ~~ 
              "/" ~~ (month : DigitCharacter ..) ~~ ___ -> 
             "http://kylen314.com/wp-content/uploads/" ~~ year ~~ 
              "/" ~~ month ~~ "/"] <> 
           fanyi[#,pinyin] &@(Last[#] &@(StringSplit[#, "/"] &@kk[[i]])), 
          {i,1, Length@kk}]]][pictxt]];

反正上面代码乱七八糟一堆,所做的事情就是利用正则表达式提取出年月日,文件名等信息,然后构造出各个URL的替换规则{A1->B1,A2->B2,…}之类的,然后直接调用StringReplace替换掉原博文就是了;

唯一一点需要注意的是,以前的博客里面有一些Mathematica识别不了的字符,比如α之类的,这种需要专门再转一下:

反正就是再运行一下下面这个语句:

newblog = StringReplace[newblog, {"ꆰ" -> "\"", "ꆱ" -> "\""}];

可能上面的非法字符在这篇文章里面看不清,在Mathematica里面这个符号是这样子的:

bokebanjia

嘛,最后一步就是将博文导出到新的文件中,复制到Wordpress里面就是了:

Export["new blog.txt", newblog, CharacterEncoding -> "UTF-8"];

嘛,这篇算给我水玩了,可以睡觉了~

其实这个方法根本不实用,因为好像真正会的人,估计会有别的方法,比如直接操作数据库(风险略大,而且我不懂),或者将来(或现在)有插件;

就算都不是,那么大部分人也不会选择用Mathematica这么蛋碎的方法来搞这个。。。虽然思路上完全可以用任何一门别的语言来完成。。。

所以这个方法算是。。。永远都不会有人再用得到了吧。。。【至少我不希望我会再用这段代码。。。】


【完】

本文内容遵从CC版权协议,转载请注明出自http://www.kylen314.com

分类: Mathematica 标签: ,
  1. 2013年12月26日23:37 | #1

    然后最后是想表达博客移植还是文件名转换?

    • 2013年12月27日00:19 | #2

      就是博客搬家的时候把文件名转换后替换掉原有的。。。

  2. 2013年12月27日14:09 | #3

    自从博客搬家出现中文名图片不能读取的问题(文件名乱码)后就再也不敢上传中文名文件了

    • 2013年12月27日14:12 | #4

      搬了之后肯定不敢再用了。。虽然经常还是会脑子短路没仔细检查就传上来了。。

  3. 2013年12月28日09:12 | #5

    呵呵呵 ,其实也就是太麻烦了

    • 2013年12月28日13:18 | #6

      是很麻烦的说,但是我到现在也没有找到什么好方法。

      • 2013年12月28日13:18 | #7

        嗯,就搬家不喜欢

        • 2013年12月28日13:27 | #8

          主要是以前那种博客虽然是基于wordpress,但是你要搬家只能导出一个xml文件。。。现在的话,搬家还是相对比较便捷的。。

          • 2013年12月28日13:28 | #9

            可以转数据库的吧

            • 2013年12月28日13:34 | #10

              以前在blog.com那种地方搭的博客,不行的,export只有xml文件。。其实xml也没啥问题。。反正wordpress可以导入,只是上面说的那个中文名问题还有需要另外想办法把资源爬下来而已。。

  4. 2013年12月31日18:34 | #13

    好强大。不过我记得有专门的插件的

    • 2013年12月31日18:43 | #14

      你是指中文支持?

      • 2013年12月31日18:52 | #15

        中文本身就支持:http://test.leniy.org/?attachment_id=5594我是指的自动把资源的中文名变成拼音的插件。我记得之前看到过,你可以去搜搜

        • 2013年12月31日18:55 | #16

          URL本身支持带中文的?!!我查过好象不行。。为了一劳永逸我已经全部改了;以后也是乖乖用英文。。插件不想装太多。。而且我直觉上觉得这个插件不难,搞不好可以自己写代码实现。。

          • 2013年12月31日19:10 | #17

            你是说url啊,这个是不支持的,但是中文名的附件支持,就如我上面提供的那个附件一样。另外批量转换插件的话,用一次卸载就可以了

            • 2013年12月31日19:12 | #18

              唉,之前刚刚搬站,问题多多,只能用自己能想得到做得出的方法来实现。。反正以后应该不会有这个问题了。。

          • 2013年12月31日19:11 | #21

            转换不难,麻烦的是汉字到拼音的对应表。所以有现成的就不用自己写了

          • 2013年12月31日19:11 | #22

            我的博客启用了23个插件,里面只有6个是我自己写的,剩下的全部是别人的

  5. 2014年1月4日09:08 | #23

    这个应该是移植,不过使用的方式蛮高洋次的

  6. 2014年4月6日09:42 | #25

    真够折腾的

    • 2014年4月6日13:53 | #26

      是折腾。。。但是我也没找到什么好方法。。到现在也还没有。。。

  7. 2014年4月8日23:11 | #27

    没搬过家,也不敢搬

  8. 2014年4月26日11:14 | #28

    还是外面一个图床好,搬家完全不用更改哦

    • 2014年4月26日15:59 | #29

      以前那个博客是在blog.com上面的,虽然他平台是wp,但是实际上他提供给用户的只有一个wp-admin的登录入口,ftp啊数据库啊什么的全都没有,所以图床不好弄,而且搬家图片资源还要自己导出。。

      • 2014年4月27日13:33 | #30

        嗯。。我倒是买的VPS,全部自己设定。。

        • 2014年4月27日15:15 | #31

          嗯,用虚拟主机或VPS的搬家就基本不会有啥问题了,ftp和数据库一导出,啥都解决。【以前不懂,觉得用免费的平台写博客挺方便的啊。。根本没想到将来自己会想买主机做博客和搬家这种事。。。

验证码:0 + 2 = ?

友情提示:留言可以使用大部分html标签和属性;

添加代码示例:[code lang="cpp"]your code...[/code]

添加公式请用Latex代码,前后分别添加两个$$