Python中的旁遮普语词干提取器

教授要求为旁遮普语创建一个词干提取器。在开始在线搜索时,发现虽然有一些关于旁遮普语自然语言处理的论文,但并未找到合适的数据集。

印度理工学院孟买分校创建了一个名为WordNet的数据库,其中包含了许多印度语言的数据,但他们使用了一个Web界面并采用了SQL,并没有使用Python。由于教授要求用Python来实现词干提取器,因此无法使用这个Web界面。

因此,编写了一段Python代码来实现这一功能。希望会喜欢。首先,让向介绍词干提取以及本代码中使用的算法。

出于语法原因,文档会使用不同形式的单词,例如“organize”、“organizes”和“organizing”。此外,还有一系列相关单词具有相似的含义,如“democracy”、“democratic”和“democratization”。

在许多情况下,似乎将这些单词中的一个搜索结果返回包含集合中另一个单词的文档是有用的。

什么是词干提取?词干提取是从单词中去除词缀以获得单词的根形式的过程,而不需要进行完整的形态学分析。词干提取的目标是将相似的单词简化为相同的词干。例如:

am, are, is –> be car, cars, car’s, cars’ –> car

这种文本映射的结果将类似于:

the boy’s cars are different colours –> the boy car be differ color

还有一个过程叫做词元还原,它与词干提取有相同的目标,即将屈折词和相关形式的单词简化为一个共同的基础形式。但词干提取与词元还原在实现这一共同目标的方法上有所不同。

现在,让专注于词干提取。要了解更多关于词干提取的信息,可以查看这个链接!

为了创建一个词干提取器,使用了后缀剥离算法。

后缀剥离算法正如其名,通过剥离单词的后缀来获得根词。这个算法不依赖于包含根词和屈折词的查找表。相反,遵循一组规则来移除这些后缀。这些后缀可以是简单的或复合的。要了解更多关于旁遮普语语法的信息,请查看这个链接!

让开始Python代码。可以在这个GitHub链接中获取这段代码。建议在阅读文章的同时打开这个GitHub仓库,以便更好地理解代码中实际发生的事情。那么,让开始吧。

首先,创建了一个旁遮普语类。在这个类中,创建了一些函数。在__init__()函数(也称为构造函数或特殊函数)中,创建了一个后缀字典。这个字典以键值对格式包含后缀。

接下来,定义了一个参数化函数rreplace()。这个函数主要用于用‘ ’替换后缀,从而形成新词。第一个参数string是将要执行替换技术的文本。第二个参数‘old’是想要替换的文本,即这个文本将在字符串中被替换。

第三个参数‘new’是将替换旧文本的文本。第四个参数count(最初设置为None)是字符串中要替换的单词数量。这个函数返回所有替换后的最终单词。

然后定义了另一个参数化函数gen_replacement()。这个函数返回最初创建的后缀字典中的后缀。键为‘1’和键为‘5’的单词包含由‘laggan’(在印地语中称为‘matra’)引导的字母。因此,这个函数移除它们并返回新的后缀。

最后,定义了函数stemmer(),它接受文本作为参数。这个函数用于提取文本中的单词。创建了一个包含字典后缀键值的列表tag。开始一个for循环,在其中将首先分割文本。

对于这个分割文本中的所有单词,如果L在tag中,将开始另一个for循环。如果是这样,检查标志值。如果标志等于1(flag==1),退出循环;否则,检查单词长度是否大于L+1。

在这里,只检查长度大于2的单词(长度小于2的单词基本上是停用词,所以实际上不需要它们)。接下来,再次开始一个for循环。对于后缀列表[L]中的变量‘suf’,检查单词是否以该特定后缀(suf)结尾。如果没有,那么继续循环;否则,调用rreplace函数。在这个函数内部,调用gen_replacement函数。新词存储在word1变量中。

这个word1存储在字典dict_punj {}中。将标志变量设置为1并退出循环。最后,检查标志是否等于零。如果是这样,将单词原样存储在dict_punj {}中并返回这个字典;否则,简单地返回字典dict_punj。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485