分类 "文本处理" 下的文章

最近项目需要用到中文分词,实现词云和情感分析的效果。

因为不是十分重要的业务,第一反应是想着接入外部云厂商的 API 接口:

利用大公司的机器学习模型资源,快速实现需求,我这边可以腾出时间继续做活动项目。

虽然刚过完年,但是感觉事情还是不少——很多东西都没有做好,好多代码还得优化、迁移等等。

看了腾讯云的接口,太贵了。按数据量估计一天要好多人民币!

麻了麻了……还是自己做吧哈哈!

不得不说,Go 结巴 分词非常好用,相比其他库,它速度飞快!

原版是 C++ 实现的,但我的开发语言主要是 Go,作者也给了 Go 的绑定:

https://github.com/yanyiwu/gojieba

照着官方的 Demo,很快就完成了第一版。太强大了!

不过有些句子,分词结果并不符合预期。

比如 我是奥斯卡,速来,带我飞,快点进群 这句话,

速来 被硬生生拆分成两个字,

带我飞 变成 带我

阅读全文

这段时间工作的需求多了不少,文章开始越来越水了。

实在抱歉,时间真的很仓促。

本次分享的是一个函数——根据首尾字符串截取中间的字符串。

虽然这个函数非常简单,但是真的很好用!也很常用!

比如 “我今天真的很高兴” 这句话,要把 今天 截取出来:

常规的方式是 strings.Index 出位置,然后根据字符串(今天)的长度,返回词的内容。

如果是 HTML 呢?比如获取链接地址:

<a href='https://m.baidu.com/'>跳转到百度</a>

这个时候你还想用 strings.Index 吗?

我是不想用的!太麻烦了。而用我的这个函数,就很方便了!

直接 StringCut(s, "href='", "'", false) 就可以轻松拿到链接地址!非常通用,无需关心越界问题。

func StringCut(s, begin, end string, withBegin bool) string {
    beginPos := strings.Index(s, begin)
    if beginPos == -1 {
        return ""
    }
    s = s[beginPos+len(begin):]
    endPos := strings.Index(s, end)
    if endPos == -1 {
        return ""
    }
    result := s[:endPos]
    if withBegin {
        return begin + result
    } else {
        return result
    }
}

附带单元测试,包含了很多例子,如果还有特殊情况,欢迎补充(找 bug 哈哈):

阅读全文

CSV(Comma-Separated Values,逗号分割值),就是用纯文本的形式存储表格数据,最大的特点就是方便。

作为开发,我们经常面临导数据的问题,特别是后台系统,产品或者运营的同事常常会提需求。

Emmm,实话说,直接用 PHPExcel 也是 OK 的,不管是 WPS Office 或者微软 Office,都能完美支持。

但我还是比较喜欢 CSV,原因是容易实现。有时候跑脚本、写爬虫抓数据,纯文本拼接后输出真的非常舒服。

当我遇到了几个问题:

  • 发现如果原来的文本带有回车或者换行,拼接后整行就断开了;
  • 加引号可以解决,但是引号中间有引号怎么办?用 \ 转义也不行;
  • 逗号怎么办?

阅读全文