Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 识别不同的词类_Javascript_Algorithm_Nlp_Pseudocode_Linguistics - Fatal编程技术网

Javascript 识别不同的词类

Javascript 识别不同的词类,javascript,algorithm,nlp,pseudocode,linguistics,Javascript,Algorithm,Nlp,Pseudocode,Linguistics,我有一个网上商店的大量服装清单。 每个条目由一个主要单词(如衬衫、夹克)和一个或多个属性(如尺寸、颜色)组成 衣服可能具有以下属性: 尺寸:XS、S、M、L、XL 颜色:GREEN,红色,BLUE 类别:SPORT,BUSINY,CASUAL 性别:MALE,FEMALE,UNI性别 让我们看一个例子 SPO SHIRT L CAS SHIRT M GRE CAS SHIRT L RED BUS SHIRT XS RED CAS SHOES SHOES BLACK JACKET FE

我有一个网上商店的大量服装清单。
每个条目由一个主要单词(如衬衫、夹克)和一个或多个属性(如尺寸、颜色)组成

衣服可能具有以下属性:

  • 尺寸:XS、S、M、L、XL
  • 颜色:GREEN,红色,BLUE
  • 类别:SPORT,BUSINY,CASUAL
  • 性别:MALE,FEMALE,UNI性别
让我们看一个例子

SPO SHIRT L 
CAS SHIRT M GRE
CAS SHIRT L RED
BUS SHIRT XS RED

CAS SHOES
SHOES BLACK

JACKET FEM M
JACKET FEM GRE
CAS JACKET MA RED
这些项目由人类填充,因此不一致。不是每个条目都有每个属性。它们的顺序也可能不同


现在我想自动识别主要单词和属性。我还想将属性分组,如上图所示

一个示例输出就是一组单词

  • 关键词:衬衫,鞋子,夹克
  • 属性:L,M,XS,GRE,RED,CAS,SPO,BUS,FEM
以及属性的类别:

  • 五十、 M,XS
  • SPO、CAS、总线
  • GRE,RED
当然,该算法无法为类别(例如大小、颜色)提供合适的名称


我已经知道:

  • 相同类别(=相同语义)的属性是相互排斥的。所以一件衬衫只能有一种尺寸、一种颜色等
  • 属性的数量远远高于主词的数量。
    • 例如,有5种不同的鞋子,但L码会出现20次(与其他衣服)
我可以使用什么算法来识别这些单词


一种可能的解决方案是使用
更新过滤单词:

记住:在这种情况下,数据越多,算法就越精确。但是,如果只有几行具有许多属性,那么几乎所有算法都会失败。另外>=3的东西将失败的黑色和它的产品名称是领带,所以我们将不得不寻找一个好的算法

下面是我对这个问题的看法

  • 解析数据,并根据其他唯一单词为每个项目创建每个唯一单词的矩阵。这将给出哪个单词在哪个顺序中使用的统计信息,以及与该顺序中的哪个单词相关的统计信息。这也将给出一个单词在顺序中使用频率的统计信息

  • 我建议创建或(从某处导入)一个人类可识别颜色名称的列表,因为颜色名称是全局的,若它是蓝色的,那个么人们会将它写为蓝色。这将有助于识别颜色

  • 一旦确定了颜色,我们可能就可以寻找性别了。当然,如果一个人是女性,那么他写这篇文章的概率是F或FEM或女性。因此,我们必须找到与性别名称最接近的匹配项

  • 现在以c.slice(0,3)为目标, 类别列表:“运动、商务、休闲”。拆分(',).map((c)=>c.slice(0,3)), 性别列表:[“MA”、“FEM”、“UNI”], 项目清单:“鞋、衬衫、夹克”。拆分(“,”) }; 让items=text.split(/\n/).filter((line)=>!!line.trim()).map((line)=>{ line=line.trim(); 让item={}; 行分割(“”).forEach((w)=>{ Object.key(令牌).forEach((t)=>{ 代币[t]。包括(w)和(项目[t.replace”(“U列表”,简称“))=w); }); }); 退货项目; }) document.write(JSON.stringify(items,0,4)); }());查找主要单词正是封面的问题 让我们假设每个单词都是主词或属性词——也就是说,没有单词有时用作主词,有时用作属性。然后问题是将每个单词分类为主单词或属性单词——或者等价地,以确定所有单词的子集,这些单词都是主单词(因为其余的单词必须是属性单词)。我们对属性词了解不多,只是它们应该很常见。但是我们知道一些关于主要单词子集的更明确的信息:每个产品在这个子集中必须只包含一个单词

    这个问题可以建模为寻找一个,其中基本集(需要“覆盖”的项目集)是所有产品的集合,每个词都给我们一个集合,我们可以潜在地使用它来覆盖一些基本集元素:即使用该词的产品集。这个问题的一个解决方案是一个单词子集,其对应的产品集一起包含每个产品一次,也就是说,它将是主单词的候选集

    不幸的是,找到一个精确的覆盖是一个NP难问题,所以没有有效的算法可以精确地解决这个问题

    整数线性规划的形式 然而,通常情况下,通过将问题表示为一个问题,并使用ILP解算器(如免费提供的或昂贵的(但速度更快)来解决问题,可以找到准确答案或高质量的启发式答案。有两种方法:

    • 使用整数LP精确地解决问题:这可能需要很长时间,但如果存在,则可以保证找到精确的解决方案
    • 使用普通的连续LP启发式地解决问题:这将花费相当短的时间,即使是对于较大的输入大小,但通常不会找到可行的解决方案。大多数变量不是被指定为1或0,而是由解算器在[0,1]范围内的某个地方指定一个值,该值通常可以解释为置信度得分,并简单地四舍五入到0或1。这样做并不能保证获得最佳甚至可行的解决方案,但通常可以通过执行此舍入,然后“纠正”任何违反可行性的情况(特别是,没有指定主词的任何产品,或[编辑7/3/2016]任何
      p_i_1*x_1 + p_i_2*x_2 + ... + p_i_n*x_n = 1.
      
      x_1 + x_2 + ... + x_n
      
       1    BLACK
       2    BUS
       3    CAS
       4    FEM
       5    GRE
       6    JACKET
       7    L
       8    M
       9    MA
      10    RED
      11    SHIRT
      12    SHOES
      13    SPO
      14    XS
      
      Minimize
        x_1 + x_2 + x_3 + x_4 + x_5 + x_6 + x_7 + x_8 + x_9 + x_10 + x_11 + x_12 + x_13 + x_14
      Subject To
        x_13 + x_11 + x_7 = 1
        x_3 + x_11 + x_8 + x_10 = 1
        x_3 + x_11 + x_7 + x_10 = 1
        x_2 + x_11 + x_14 + x_10 = 1
        x_3 + x_12 = 1
        x_12 + x_1 = 1
        x_6 + x_4 + x_8 = 1
        x_6 + x_4 + x_5 = 1
        x_3 + x_6 + x_9 + x_10 = 1
      Binary
        x_1 x_2 x_3 x_4 x_5 x_6 x_7 x_8 x_9 x_10 x_11 x_12 x_13 x_14