##车商批量资源发布工具
离开某司一年了,现在放出代码~
https://bitbucket.org/verycute/onlinemessageprocessor/src/master/
车商们加油
####背景
车商发布资源门槛较高,手里的资源想全部转化为平台上的规范资源需要一条一条发布,比较繁琐,但是车商会天天在朋友圈、微信群里发布他们用自然语言“编写”的资源,例如:
X1/286000 白,蓝,红,粽⬇14.5点
GT320/398000 矿白黑 ⬇16.5点
525/499600 矿白摩卡 ⬇18.5点
☎18521707911
全部上海提,店车店票
如果能把这种信息帮车商一键转换成标准模式的资源,那么他们发布资源的效率就会高很多,对于帮助我们提升平台上的资源量有极大的好处。
所以,现在的问题转换为典型的自然语言处理问题了
####基本知识
车商确定一款车是用 车型+指导价 或者 ***品牌+指导价***的组合信息,例如朗逸1249,帕萨特2229,奔驰3148等,这里1249和124900等价
所以回头看上面的例子:
X1/286000 白,蓝,红,粽⬇14.5点
其实就是 品牌:宝马,车型:X1,指导价:286000,4个颜色,售价是下14.5点
####问题分解
这个项目乍看上去能做,按照传统思路,这就是个序列标注的问题,简单点可以上CRF,复杂点可以上RNN,但是使用监督学习的最大门槛是没有标注数据,即没有ground truth就没办法去train model。到此,监督学习的方案可以打住了,在资源有限的前提下,只能上无监督
基本策略:
**0. 文本预处理,任何场景都避免不了 **
a. emoji字符
b. 特殊含义的字符替换,例如“⬇”替换成“下”
c. 繁体转简体
d. 全角转半角
e. 剔除每行的起始标识,例如1. 2、等
f. 移除类似emoji一样的信息,例如"[微笑]","[鲜花]","[太阳]"等
g. 把售价标准化,例如"-17w"替换成"下17w"
h. 剔除日期信息带来的干扰
**1. 分段,切分出一条完整的资源,这里先默认一行是一条有效资源 **
相同的信息进行去重
**2. 资源解析 **
a. 判断是不是单条资源,考虑到配置、款式、指导价等信息都会有纯数字的信息,干扰较多,所以一行有多条资源的情况暂不处理
b. 判断规格,中规国产和平行进口的处理方案不一样,因为中规国产有指导价,而平行进口车没有
c. 分词,解析tokens,引入基于朴素贝叶斯的TokenTagClassifier用于辅助打标功能,例如确定408到底是价格还是车型,如果品牌是标致那么就是车型,而如果品牌是路虎,那就是指导价
d. 去官方车型库中进行车型匹配,强依赖现有搜索的部分功能(分词,queryparser),例如例子中的"X1/286000 白,蓝,红,粽⬇14.5点",最后"X1/286000"会被用来进行搜索对应车型
**3. 车型匹配异常 **
a. 匹配程度较低,判定是否是无效信息。如果该行信息包含的可靠信息较少,例如某个公司的名称,或者某个人的姓名+联系方式,那么该行对我们来说基本没有意义(**至少目前没有意义**)
b. 匹配车型较多,或者有歧义,例如"朗逸","宝马车源",这些信息远无法帮我们确定具体的款式,但是也是相当重要的信息,至少缩小了我们的搜索范围;实际数据证明,把这些信息记录下来用于我们进行后续的解析是非常重要的:
>帕萨特
2229 下2.5w
2239 下2w
c. 新、老款式,如"新朗逸","老桑塔纳",在处理这种case的时候用了一个"偷懒"的小技巧,即如果分词以后有"新"或者"新款"这种token,就把这个token使用同义词映射成"16款"、"17款",同时在检索车型款式的时候按照年份逆序,解决了有的车的新款是16款,而有的车的新款是17款的问题,"旧款"的解决方案同理
d. 规格预测错误,有的平行进口车信息是不会直接写明规格的,所以要用pseudo relevance feedback 的思路,根据搜索返回车型来重新判断规格是国产中规还是平行进口
**4. 颜色抽取 **
a. 单色处理,白肯定是白色, 白金有可能是白金色,也有可能是外白内金两个颜色,还有可能是白色和金色两个外色
b. 颜色模式确定,如果有多个颜色,那么就分开模式:都是外色或者都是外+内
c. 官方颜色匹配,把颜色替换成官方车型库里的标准颜色
**5. 价格解析 **
a. 区分中规国产车和平行进口车
b. 判定加价还是降价
c. 如果是降价,判定下xx点还是下xx万
d. 如果加价降价不明确,根据行情价来判断是加价还是降价还是直接报价
**6. 平行进口车车架号解析 **
基于正则,正则模式存储在文件中,匹配命中以后,把原始文本中的相关车架号内容剔除,因为车架号的纯数字容易给价格的抽取带来干扰
**7. 平行进口车期货现车解析 **
基于正则,正则模式存储在文件中
**8. 平行进口车价格解析 **
基于正则,正则模式存储在文件中
**9. 备注解析 **
随着信息的抽取,光标会一直后移,所有的流程进行完成以后,剩下的信息可以被粗浅的当做是备注,这也和备注不太重要有关
####优化
-
性能优化,使用redis做缓存,key为user_id_内容
-
扩展性优化,Logger统一使用slf4j