English 中文(简体)
自然语言工具箱——改造楚克
  • 时间:2024-09-17

Natural Language Toolkit - Transforming Chunks


Previous Page Next Page  

Why transforming Chunks?

现在,我们已经从判决中吸取教训或短语,但我们应该与这些教训做些什么。 一项重要任务就是要改变它们。 但为什么? 它是:

    grammatical correction and

    rearranging phrases

Filtering insignificant/useless words

如果你想判断某一短语的含义,那么“......”、“a”等许多常用词语就微不足道或无用。 例如,见以下短语:

“电影良好”。

这里最重要的词语是“去除”和“Good”。 换言之,“......”和“......”这两个词都是无用的或微不足道的。 这是因为,如果没有他们,我们也可以获得这一短语的相同含义。 “Good 电影”。

在下面的 p中,我们将学会如何消除无用/无足轻重的言辞,并在德国马克各界的帮助下保持重要话。

Example

第一,通过特里克斯敦>查询 我们需要确定哪些小tag子是重要的,哪些不是。 让我们看一看下面的言辞和口号:

Word Tag
a DT
All PDT
An DT
And CC
Or CC
That WDT
The DT

从上表看,除闭会外,我们可以看到所有其他政党都以DT为终结,这意味着我们可以通过审视tag子的面貌来抹掉微不足道的言辞。

例如,我们将使用一个名为filter(>)的功能,该功能只使用一个小块,并在没有任何微小的缩略语的情况下重新填充。 这一功能过滤了与DT或CC最终的任何标签。

Example


import nltk
def filter(chunk, tag_suffixes=[ DT ,  CC ]):
   significant = []
   for word, tag in chunk:
      ok = True
      for suffix in tag_suffixes:
         if tag.endswith(suffix):
            ok = False
            break
      if ok:
         significant.append((word, tag))
   return (significant)

现在,让我们在我们的谢 Python中利用这一功能过滤器删除微小字——


from chunk_parse import filter
filter([( the ,  DT ),( good ,  JJ ),( movie ,  NN )])

Output


[( good ,  JJ ), ( movie ,  NN )]

Verb Correction

很多时候,用现实世界语言,我们看到了不正确之词。 例如,“你罚款吗?”不正确。 本句中的ver字不正确。 刑期应为“是你罚款吗?” NLTK为我们提供了纠正这种错误的途径,建立了相互校正图。 这些校正分布图的使用情况取决于是否在草原中存在多元或单体的 no。

Example

为了实施沙捞越计划,我们首先需要确定校正图。 让我们绘制以下两个地图:

Plural to Singularmaps


plural= {
   ( is ,  VBZ ): ( are ,  VBP ),
   ( was ,  VBD ): ( were ,  VBD )
}


singular = {
   ( are ,  VBP ): ( is ,  VBZ ),
   ( were ,  VBD ): ( was ,  VBD )
}

如上文所述,每一次绘图都有一张挂图,向另一张挂图。 举例来说,最初的制图涵盖了地图的基本内容,即,反之亦然。

其次,我们将确定一个名为verbs()的职能,在这种职能中,你可以通过一个带有不正确字面的chin子,并且“能够得到纠正的chu。 为了做到这一点,verb()功能使用称为index_chunk()的助手功能。 他们将寻找第一个被封不动字的位置。

让我们看到这些职能——


def index_chunk(chunk, pred, start = 0, step = 1):
   l = len(chunk)
   end = l if step > 0 else -1
   for i in range(start, end, step):
      if pred(chunk[i]):
         return i
      return None
def tag_startswith(prefix):
   def f(wt):
      return wt[1].startswith(prefix)
   return f

def verbs(chunk):
   vbidx = index_chunk(chunk, tag_startswith( VB ))
   if vbidx is None:
      return chunk
   verb, vbtag = chunk[vbidx]
   nnpred = tag_startswith( NN )
   nnidx = index_chunk(chunk, nnpred, start = vbidx+1)
   if nnidx is None:
      nnidx = index_chunk(chunk, nnpred, start = vbidx-1, step = -1)
   if nnidx is None:
      return chunk
   noun, nntag = chunk[nnidx]
   if nntag.endswith( S ):
      chunk[vbidx] = plural.get((verb, vbtag), (verb, vbtag))
   else:
      chunk[vbidx] = singular.get((verb, vbtag), (verb, vbtag))
   return chunk

除这些职能外,还安装和操作了设在Salph或Anaconda的地方名录中的灰色档案。 我将其节省为verbcorrect.py

现在,请上verbs(>>>,在座标有的<0> >上接下>>>。 chu


from verbcorrect import verbs
verbs([( is ,  VBZ ), ( you ,  PRP$ ), ( fine ,  VBG )])

Output


[( are ,  VBP ), ( you ,  PRP$ ), ( fine , VBG )]

Epminating passive voice from phrases

另一项有益的任务是消除用语上的消极声音。 这样做可以帮助敲打字。 例如, >> 指导是伟大的。 可改为伟大的教员

Example

为了实现这一目标,我们正在界定一个名为epminate_passive()的职能。 这将把ver子右侧与左手边隔开,把ver子作为ot点。 为了在周围找到ver,还将使用上文界定的index_chunk(功能。


def epminate_passive(chunk):
   def vbpred(wt):
      word, tag = wt
      return tag !=  VBG  and tag.startswith( VB ) and len(tag) > 2
   vbidx = index_chunk(chunk, vbpred)
   if vbidx is None:
      return chunk
   return chunk[vbidx+1:] + chunk[:vbidx]

现在,请我们打电话 取消_passive()。 指导职能:


from passiveverb import epminate_passive
epminate_passive(
   [
      ( the ,  DT ), ( tutorial ,  NN ), ( was ,  VBD ), ( great ,  JJ )
   ]
)

Output


[( great ,  JJ ), ( the ,  DT ), ( tutorial ,  NN )]

Swapping noun cardinals

我们知道,像5这样的中枢词被束缚为裁谈会的空白。 这些主要字词往往发生在大声之前或之后,但为了实现正常化,应当总是将它们摆在大声面前。 例如,日期 1月5日可在 5 January上书写。 让我们以以下例子理解这一点。

Example

为了实现这一目标,我们正在界定一个名为swapping_cardinals()的职能。 这将冲销在与公证人通婚后立即出现的任何卡片。 有了这一卡片,就立即在纽伦举行。 为了与特定标签进行平等比较,它使用一种称为tag_eql()的助手功能。


def tag_eql(tag):
   def f(wt):
      return wt[1] == tag
   return f

我们现在可以界定_(card)——


def swapping_cardinals (chunk):
   cdidx = index_chunk(chunk, tag_eql( CD ))
   if not cdidx or not chunk[cdidx-1][1].startswith( NN ):
      return chunk
   noun, nntag = chunk[cdidx-1]
   chunk[cdidx-1] = chunk[cdidx]
   chunk[cdidx] = noun, nntag
   return chunk

现在,让我们在日期“一月五日”上调用swapping_cardinals()函数 -


from Cardinals import swapping_cardinals()
swapping_cardinals([( Janaury ,  NNP ), ( 5 ,  CD )])

Output


[( 10 ,  CD ), ( January ,  NNP )]
10 January
Advertisements