0%

LaTeX 中的 hyperref 宏包是一个非常强大的宏包,它提供了和超链接的各种接口。特别地,对于 LaTeX 原生的交叉引用,hyperref 宏包能够在引用位置生成一个超链接——点击之后跳转到相关位置。

不过,如果你将 \caption 放在 \includegraphics 后面,然后在文中对图片进行引用的话,点击超链接后将跳转到图片标题位置。此时,图片本身会被挡住。这多少有点不方便。

阅读全文 »

本系列的上一篇文章介绍了 NLP 中处理分词的两种方法,其中基于统计语言模型的方法以巨大的优势胜出。

在上一篇文章的末尾,我们讲了优秀的算法模型在形式上应该是简洁优雅的。具体来说:

  1. 一个正确的数学模型在形式上应该是简洁优雅的。
  2. 一个正确的数学模型,在刚开始的时候可能还不如一个经过精心调教的错误模型准确。但是错误模型不论如何调教,因为方向错了,所以终究会有处理不了实际问题的时候。
  3. 正确的数学模型可能因为受到干扰而不准确。此时应该找出干扰、噪音,并解决它们,而不是简单凑合去修修补补。

这篇文章我们继续讲分词和统计语言模型。不过,这次的内容会比上次要深入、深奥,并且会涉及到一些数学推导,以及一些工程上的 Dark Side。不过,其中有些非常 Tricky 的技巧对于大多数读者来说没有必要阅读,而剩下的部分中简单的数学推导也不致枯燥。

阅读全文 »

一个基本的搜索引擎的工作,基本上可以分成以下三个部分:

  1. 利用网络爬虫下载网页,分析网页关键词,制成索引备用;
  2. 理解用户输入,确定检索关键词;
  3. 根据关键词和网页索引,按照相关性排序列出搜索结果。

第一个部分主要涉及网络爬虫技术、图论、自然语言处理等技术;第二个部分主要涉及自然语言处理;第三个部分同样涉及自然语言处理。

自然语言,即是人类用来交流的语言。

由此可见,自然语言处理(NLP, Natural Language Processing)是现代搜索引擎很重要的内容,其终极目的是将自然语言转化为计算机容易处理的形式。

阅读全文 »

使用 QQ 这么多年,管理的群越来越多。现在每天被入群申请搞得烦不胜烦,于是萌生了写一个 QQ 机器人的想法。

要想实现一个 QQ 机器人,首先是要在程序里模拟登录。经过整理,可用的思路有两个:

  • 使用 WebQQ 的方式登录,模拟浏览器的行为;
  • 使用 Android QQ 的方式登录,模拟 Android 客户端的行为。

二者各有利弊。使用 WebQQ 方式登录协议相对简单,网络上也有相关分析;但是 WebQQ 不能与电脑上的 QQ 共存:登录 WebQQ 就会将电脑上的登录踢下线。使用 Android QQ 的方式登录,由于没有现成的资料可供查询,实现起来十分复杂;但是 Android QQ 是手机端 QQ,可以与电脑端 QQ 共存。

「要做就做好」。思前想后,我还是决定使用 Android QQ 的方式登录。于是问题来了,怎样去抓取 Android QQ 的行为呢?

  1. 在 Android QQ 外围进行抓包分析,然后让程序伪装成 Android QQ 向腾讯的服务器发包;
  2. 直接读 Android QQ 的源代码,然后仿照着相关内容重新实现。

方案 1 是常规方法,若能顺利实施,无非是不断重复抓包 - 分析 - 伪造的步骤。不过 QQ 的通信信息是加密处理过的,抓包分析比较费劲。因此,我决定尝试反编译 Android 程序,直接阅读源代码。

这里我介绍反编译安卓程序,得到 Java 代码的详细方法。

请尊重他人劳动成果,勿将此方法用于恶意活动。

阅读全文 »

XeLaTeX 是 eTeX 的扩展。它直接支持 Unicode 字符,并且能够调用安装在操作系统的字体。这些特性解决了以往 TeX 切换字体不便的问题,对于中文 TeX 用户来说,更是福音。

前段时间,TeX Live 更新到了 TeX Live 2015 版本,Mac OS X 上相应的也更新到了 MacTeX 2015 版本。不过此次更新之后,XeLaTeX 却无法通过字体文件名调用系统字体。亦即,下列代码无法通过编译(提示 font-not-found):

1
2
3
4
5
6
\documentclass{article}
\usepackage{fontspec}
\setmainfont{GillSans.ttc}
\begin{document}
GillSans Test.
\end{document}
阅读全文 »