hadoopСѧ��
������
������
  • ע������2018-09-13
  • ������160
  • QQ3234520070
  • ���360ö
  • ��˿0
  • ��ע0
�Ķ���17727�ظ���0

hanlp�ִʹ���Ӧ�ð�������Ʒͼ�Զ��Ƽ����ܵ�Ӧ��

¥��#
���� �����ڣ�2019-08-07 11:43
��ƪ����һ��hanlp�ִ�����Ӧ�õİ���������˵������һͼ�⣬���̼����ɷ����������Ʒ��ͼƬ������ǿ���һ��������õġ�

�ȿ�һ��Ч��ͼ�ɣ�

ͼƬ��ͼ1.gif


��Ʒ�����Ƽ�Ч����ƥ��ȸߵķ�����ǰ��

ͼƬ��ͼ2.gif


����뷨�ܺã�����ôʵ���ˡ�������һ�½���������裺
1��ͼ�⽨�裺����Ҫ��ͼƬ�ɣ�ͼƬ�϶�Ҫ�й�������Ʒ���ơ���Ʒ�����Ʒ��񡢹ؼ��ֵ���Ϣ��
2����Ʒ�ִ��㷨��������Ʒ�������̼��Լ����õģ����ǹ淶�ģ����Բ�������ȫƥ�䣬Ҫ�кõķִʿ����ҳ��ؼ��֡�����һ�㣬�ִʿ�Ҫ�ܹ��Զ���ʿ⣬����ܶ�̬��ӡ�������߲�֪��ʲô�Ƿִʣ������аٶȣ����IJ��ռ������
3���Ƽ�ƥ����㷨���϶�Ҫ��ƥ��ķ���ǰ�棬����Ҫ��ƥ��ȷ������̼ҿ϶���ͼ��û�е���Ʒ���Զ�ƥ���ʱ�򣬲���������ò���ص�ͼƬ��
��˵��һ�£�������ҵû����������֮��Ĺ��ߣ����Ա��ʾͿ��������ݿ������
��ҳ�������ȷ���һ��ͼ�⣬������ͼ������ý��档

ͼƬ��ͼ3.png


����������һ��ͼ��ı�ṹ


CREATE TABLE `wj_tbl_gallery` (
 `gallery_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '����',
 `fileid` int(11) NOT NULL COMMENT '�ļ��������ϵ��ļ�ID',
 `ptype` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'ͼƬ���ͣ�0 ��������ͼƬ',
 `materialsort` varchar(50) DEFAULT NULL COMMENT '��Ʒ����',
 `materialbrand` varchar(50) DEFAULT NULL COMMENT '��ƷƷ��',
 `materialname` varchar(100) NOT NULL COMMENT '��Ʒ����',
 `material_spec` varchar(50) DEFAULT NULL COMMENT '��Ʒ���',
 `material_allname` varchar(200) DEFAULT NULL COMMENT '��Ʒ��������',
 `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '״̬��0������1ͣ�ã�2ɾ��',
 `updatedatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '����ʱ��',
 `keyword` varchar(200) DEFAULT NULL COMMENT '��Ʒ�ؼ��֣��ö��Ÿ��',
 `bstorage` tinyint(4) NOT NULL DEFAULT '0' COMMENT '�ؼ����Ƿ���� 0û�У�1��',
 PRIMARY KEY (`gallery_id`),
 KEY `idx_fileid` (`fileid`)
) ENGINE=InnoDB AUTO_INCREMENT=435 DEFAULT CHARSET=utf8 COMMENT='ͼ����Ϣ��';


����ʾ����

ͼƬ��ͼ4.png



��˵һ��material_allname�Ǹ�ʲô�õ��أ���Ҫ����ƴ����Ʒ���ơ����� ���ؼ����ֶΡ�����дsql��ʱ��ȽϷ��㡣�ؼ����ֶ��Ǹ�ʲô�õ��أ�������������1����Ʒ�����ж�����֣��������Ƶġ����Ǹ��ִʿ⶯̬��Ӵʿ⡣ͼ���˵���⡣

��˵һ�·ִʿ⣬����ѡ����ǿ�Դ�ĺ����Էִʿ�-hanlp�ִʹ���
�ŵ��Ǵʿ���д��Է����������Զ���ʿ⡣ȱ�㵱ȻҲ�У����Dz�֧�����ݿⷽ����̬��ȡ�ʿ⡣����˵һ�����Լ��Ľ���취��

�ϴ��룺
�ִʴ���,��ʱ���ȥ��һЩû���ַ���

ͼƬ��ͼ5.jpg


���Ƿִʣ����ǵ���SegmentUtils.segmentTerm(materialname);

��̬��Ӵʿⷽ����

  private void addCustomerDictory(){
       Integer max = galleryRepository.getMaxGallery();
       if(CommonUtils.isNotEmpty(max) && max > 0 && max > SegmentUtils.CACHE_GALLERY_ID){
           int oldid = SegmentUtils.CACHE_GALLERY_ID;
           SegmentUtils.CACHE_GALLERY_ID = max;
           List<String> gallery = galleryRepository.getGallery(oldid,max);
           if(CommonUtils.isNotEmpty(gallery)){
               Map<String,Boolean> dicMap = new HashMap<>();
               for(String w : gallery){
                   if(CommonUtils.isNotEmpty(w)){
                       String[] array = w.split(",");
                       if(CommonUtils.isNotEmpty(array)){
                           for(String item : array){
                               String value = item.trim();
                               if(CommonUtils.isNotEmpty(value)){
                                   dicMap.put(value, true);
                               }
                           }
                       }
                   }
               }
               Set<String> keys = dicMap.keySet();
               if(CommonUtils.isNotEmpty(keys)){
                   SegmentUtils.insertCustomDictory(keys);
               }
           }
       }
   }

   /**
    * ��ȡ�ؼ���
    *
    * @author deng
    * @date 2019��3��13��
    * @param galleryId
    * @return
    */
   @Query("select keyword from Gallery a where galleryId > ?1 and galleryId<=?2  and a.keyword !=''  and bstorage=0")
   public List<String> getGallery(int bgalleryId, int egalleryId);

   @Cacheable(value = CacheConstants.CACHE_GALLERY, keyGenerator = CacheConstants.KEY_GENERATOR_METHOD)
   @Query(value = "select gallery_id from wj_tbl_gallery a where  a.keyword !=''  and  bstorage=0 order by gallery_id desc limit 1", nativeQuery = true)
   public Integer getMaxGallery();

˵һ�½��˼·������hanlp�ĵ���û�п�����mysql�϶�̬��Ӵʿⷽ����ֻ��CustomDictionary.insert�ܶ�̬��ӵ���ʵ���ʿ⣬ϵͳ����������Ҫ������ӡ��Ҿ����һ���취�����Ƿִʵ�ʱ�򣬲�һ����ı�������ͼ����������ʲô����������ݿ�һ�����Ͳ���̬��ӡ����С��ͼ����������Ͱ�û�е���һ����CustomDictionary.insert��ӽ�ȥ��ϵͳһ�㲻��������������ڷִʵ�ʱ���������һ�¡���ѯ���ݿ⵱Ȼ���л��棬�༭ͼ���ʱ�򣬰Ѷ�Ӧ�������һ�¡����ַ�ʽҲ��֧�ֲַ�ʽ���������ʵ������һ������ġ�ÿ��һ��ʱ�䣬�Ͱ�ͼ���Ĺؼ��ִʿ����ļ��Ĵʿ⣬���⶯̬���̫�࣬ռ��̫���ڴ����Զ���ʿ���ʵ�Ǻ���Ҫ�ģ��κηִʿⶼ�����ܰ������еĴʿ⣬���ִ��㷨�Ǹ��ݴʿ���չ���ģ�����˵�ʿ�����˷ִʽ����׼ȷ�ԡ�

�����ǿ�һ�·ִʵ�Ч��

��Ʒ����Ϊ��ѩ�̣��󣩡��ķִʽ�� ѩ��/nz, ��/a ,����nz��ʾר�дʻ㣬a��ʾ���ݴʡ�

�ٿ�һ�²�����ķִʽ����

��ƷƷ����:����ܽ������ɫơ�ơ�,�������:ơ��,

�ִʽ��:��/ng,ܽ/n,��/ag,��/ng,��ɫ/n,ơ��/nz

�����ԣ��ִʽ�������룬��ܽ������ɫ��ʵ��һ����Ʒ�������ֿܷ�����ô���أ���ʱ��̬��Ӵʻ㹦�ܾ������ó��ˡ�

��ͼ��ؼ���ʱ�������ܽ������ɫơ�ƣ�����һ�£��ٿ�һ�·ִ�Ч����

ͼƬ��ͼ6.png


��Ʒ����:��ܽ������ɫơ��,�������:ơ��,�ִʽ��:��ܽ������ɫ/nz,ơ��/nz

��ܽ������ɫ���ֵ���һ�𣬴ﵽԤ��Ч��������ʵ���� CustomDictionary.insert(data, "nz 1024");�������á�hanlp����API���ܣ���ο��ٷ��ĵ������ľͲ������ˡ�

�����ͷϷ���ˣ���ƷͼƬƥ��ȷ��������߾��Dz�����mysql��sql�ʾ�ķ����㶨�ˣ���ʵ���õ���LOCATE�������ܼ򵥡�SQLʾ������

SELECT gallery_id, fileid, materialname, material_allname, score
, ROUND(score / 4 * 100, 0) AS rate
FROM (
SELECT a.gallery_id, a.fileid, materialname, material_allname
, IF(LOCATE('ѩ��', a.material_allname), 2, 0) + IF(LOCATE('��', a.material_allname), 1, 0) + IF(LOCATE('����', a.material_allname), 1, 0) AS score
FROM wj_tbl_gallery a
WHERE a.STATUS = 0
AND (a.material_allname LIKE '%ѩ��%'
OR a.material_allname LIKE '%��%'
OR a.material_allname LIKE '%����%')
) b
ORDER BY score DESC, materialname
LIMIT 0, 8

ִ�н����

ͼƬ��ͼ7.png



���Կ���gallery_id�ǵ�һ��������rate����75��������100��ƥ������ߵġ�

˵һ��ƥ����㷨ԭ�������ȫƥ�����1�ٷ֣��϶������ˡ�Ȼ��ȥ��ijЩ�ؼ��ֺ�Ҳƥ�����˾���90�֡������÷ִ��㷨������1�ٷִ�֣������������50�֣����������ƥ�䣬�Զ�����ͼƬ��ʱ�򣬾Ϳ��Ե���ƥ��ɹ�������ԭ�����ƥ��ʻ�Խ�࣬����Խ�ࡣ���������ֵĴʻ㣬��5���ֵĴʻ㣬�����Dz�һ���ġ����д��ԣ�ר��ʻ�������Ӧ�ñ����ݴʷ����ߡ���������calculateWeight���룬�Լ�����ˡ�

public List<Map<String, Object>> queryList(String searchstr, int pagenumber, int pagesize, String materialsortname,
           List<Term> segmentList) {
       String name = "%" + searchstr + "%";
       // �ȼ����� ����ȫƥ��100��
       List<Map<String, Object>> list = queryList(name, pagenumber, pagesize, 100);
       if (CommonUtils.isEmpty(list)) {
           searchstr = searchstr.replaceAll("\\s", "");
           String regEx = "(�ؼ�)|(/)|(\\()|(\\))|(��)|(��)|(\\d+ml)|(��.��.)|(/)|(\\*)";
           searchstr = searchstr.replaceAll(regEx, "");
           if (CommonUtils.isNotEmpty(searchstr)) {
               name = "%" + searchstr + "%";
               // �򵥹��� 90��
               list = queryList(name, pagenumber, pagesize, 90);
           }
           // ʣ�·ִ� ������
           if (CommonUtils.isEmpty(list)) {
               if (CommonUtils.isNotEmpty(segmentList)) {
                   list = queryListTerm(pagenumber, pagesize, segmentList, materialsortname);
               }
               // ���ֻ�з��࣬�ȶ�10��
               else if (CommonUtils.isNotEmpty(materialsortname))
                   list = queryList(materialsortname, pagenumber, pagesize, 10);
           }
       }
       return list;
   }

   private List<Map<String, Object>> queryList(String name, int pagenumber, int pagesize, int rate) {
       String sql = "SELECT\n" + "   a.gallery_id,\n" + "   a.fileid,a.material_allname,a.materialname \n, " + rate
               + " rate FROM\n" + "   wj_tbl_gallery a\n" + "WHERE\n"
               + "   a.material_allname LIKE :searchstr and a.status = 0  order by length(materialname)  LIMIT :pagenumber,:pagesize  ";
       Dto param = new BaseDto();
       param.put("searchstr", name).put("pagenumber", pagenumber * pagesize).put("pagesize", pagesize);
       return namedParameterJdbcTemplate.queryForList(sql, param);



   private List<Map<String, Object>> queryListTerm(int pagenumber, int pagesize, List<Term> segmentList,
           String materialsortname) {

       Dto param = new BaseDto();
       StringBuffer sb = new StringBuffer();
       StringBuffer wsb = new StringBuffer(" (");
       // ��Ȩ��
       int tw = 0;
       if (CommonUtils.isNotEmpty(segmentList)) {
           for (int i = 0; i < segmentList.size(); i++) {
               String str = segmentList.get(i).word;
               int w = SegmentUtils.calculateWeight(segmentList.get(i));
               str = StringUtils.escapeMysqlSpecialChar(str);
               tw += w;
               sb.append("if(LOCATE('").append(str).append("', a.material_allname),").append(w).append(",0) ");
               wsb.append(" a.material_allname like '%").append(str).append("%' ");
               if (i < segmentList.size() - 1) {
                   sb.append(" + ");
                   wsb.append(" or ");
               }
           }
           // ��𵥶������ĿǰȨ�ؽϵ�
           // ��ʾ�ַ����Ƿ�Ϊ��
           int emptylen = 3;
           if (CommonUtils.isNotEmpty(materialsortname)) {
               if (sb.length() > emptylen) {
                   sb.append(" + ");
                   wsb.append(" or ");
               }
               tw += SegmentUtils.DWEIGHT;
               materialsortname = StringUtils.escapeMysqlSpecialChar(materialsortname);
               sb.append(" if(LOCATE('").append(materialsortname).append("', a.material_allname),")
                       .append(SegmentUtils.DWEIGHT).append(",0) ");
               wsb.append(" a.material_allname like '%").append(materialsortname)
                       .append("%' ");

           }
           if (sb.length() > emptylen) {
               sb.append(" as score ");
               wsb.append(") ");
               String scoreSelect = sb.toString();
               String scorewhere = wsb.toString();
               String sql = "select gallery_id,fileid,materialname,material_allname,score,ROUND(score/" + tw
                       + "*100, 0) rate   from   (SELECT " + "   a.gallery_id, "
                       + "   a.fileid,materialname,material_allname, " + scoreSelect + " FROM "
                       + "   wj_tbl_gallery a " + "WHERE " + "  a.status = 0  and " + scorewhere
                       + " ) b order by  score desc ,materialname LIMIT " + pagenumber * pagesize + "," + pagesize;
               param.put("pagenumber", pagenumber * pagesize).put("pagesize", pagesize);
               logger.debug("�̼�����ͼ���SQL�����{}", sql);
               List<Map<String, Object>> list = namedParameterJdbcTemplate.queryForList(sql, param);
               if (CommonUtils.isNotEmpty(list)) {
                   return list;
               }
           }

       }


   /**
    *  ����ִ�Ȩ��
    *  @author deng
    *  @date  2019��6��21��
    *  @param term
    *  @return
    */
   public static int calculateWeight(Term term) {

       // ������
       int num = countChinese(term.word);
       // ����3�����֣�Ȩ������
       int value = num >= 3 ? 2 + (num - 3) / 2 : DWEIGHT;
       // ר��ʣ����������������Ҫ��С����2��
       if (term.nature == Nature.nz && value <= DWEIGHT) {
           value = DWEIGHT + 1;
       }
       return value;

   }
�ܽ�һ�£����Ľ��ܵ���ƷͼƬ�Ƽ����Զ�ƥ�䷽�������Կ��������൱�򵥵ģ����ʾ���mysql��like%% �Ż����ģ�����sql����hanlp�ִʿ⣬�����򵥣�����������ר����Ʒ��ƥ�䣬�ʺ�Сͼ�⡣��Ȼ�Ȳ��ϴ�˾���������������Ч�ʸߣ������ο���

ϲ��0 ����0
DKHadoop���Ż������
�ο�

���ض���