【问题标题】:Brand name simplifier品牌名称简化
【发布时间】:2014-07-22 07:15:16
【问题描述】:

是否有既定的算法/库可以根据单词创建更短、更简单的字符串?我需要简化很多品牌名称来生成我们自己的零件编号,我们在仓库中使用。

例子:

AECW....A E C WHITLOCK
BATI....BENATI
BDER....BOMBARDIER
PACC....PACCAR PARTS DIV
JAGR....JAEGER
JCB.....JCB
JNDR....JOHN DEERE

那么,有没有办法生成它们,或者我唯一的选择是创建一个包含所有它们的数据库表?

我希望生成它们的另一个原因:我已经(并且需要)一个存储所有品牌名称的表,如果没有必要,我不想存储简化的名称。另外,我仍然需要第一次生成它们的东西。

编辑:好的,我需要存储它们,但生成缩写仍然是个问题。

【问题讨论】:

  • 即使您生成缩写,如果不存储它们,您将如何避免冲突?
  • 您要专门生成这些,还是要生成任何缩写?
  • 取决于使用冲突并不总是一个问题。用于即时显示特定产品类别中的缩写产品名称。
  • 我仍然需要生成器,但你是对的,我无法避免存储它们。
  • 有了这个例子我想你找不到任何例子,我认为这更多地取决于人们如何使用这个品牌来简化他们的名字。

标签: string algorithm generator


【解决方案1】:

要生成缩写,只需删除元音(以 PL/SQL 代码为例):

create function abbr(s varchar2) return varchar2 as
  r varchar2(4000) := upper(s);
begin
  for i in 5..regexp_count(r, '[A-Z]') loop
    r := regexp_replace(r, '([A-Z])[AEIOU]', '\1', 1, 1);
  end loop;
  return substr(regexp_replace(r, '[^A-Z]'), 1, 4);
end;

fiddle

A E C WHITLOCK    AECW
BENATI            BNTI
BOMBARDIER        BMBR
PACCAR PARTS DIV  PCCR
JAEGER            JGER
JCB               JCB
JOHN DEERE        JHND

【讨论】:

  • 一个好的解决方案,我只需要修改一个如果有碰撞。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
相关资源
最近更新 更多