如何为单词构建文本分类器?

How to build a text classifier for words?

我正在尝试class将大量单词分为 5 类。每个 class 的 classes 和字符串示例包括:

invoice-Number : "inv123","in12","123"
invoice-Date   : "22/09/1994","22-Mon-16"
vendor-Name    : "samplevendorname"
email          : "abc@gmail.com"
net-amount     : "1234.56"

非常感谢在 python 中实现此目的的任何指示。

编辑 1:我正在寻找一种机器学习方法,因为 classes 的数量会更多,并且每个 class 中的数据会不同,因此正则表达式不可行。

您可以从基于 BoW 的想法开始 (Bag of Word) but modify to BoC (Bac of character) with a tokenizer that doesn't remove any character and build a dictionary of n-grams 1 到 4 个字符。

之后你可以将任何单词表示为一个向量,它可以计算存在的数量,是或不存在或 tfidf

然后构建你的模型并将词向量传递给它进行学习。您可以研究 n-gram 的交叉标签以丢弃那些在数据集中产生噪音的标签。

我希望这对一个起点有所帮助。

如您要求指点,请阅读有关 regular expressions 的内容。它们允许您检查字符串是否与特定模式匹配。

Python 通过 re 模块内置了对 RegEx 的支持。请参阅 re.match 函数。

很遗憾,我自己是 RegEx 的初学者,所以我无法为您提供更多帮助。但是我已经在上面为您提供了所需的链接。希望这足以解决您的问题。

同时,我会请朋友回答这个问题。

编辑:

我研究了 RegEx 一分钟,这就是我想出的:

import re

s = <Whatever you are trying to match>

invoice_number = '(inv|in)\d+'
invoice_date = '((\d{2}/\d{2}/\d{4})|(\d{2}-[A-Z][a-z]{2}-\d{2}))'
vendor_name = '[a-z]+'
email = '\w+@\w(\.\w+)+'
net_amount = '\d+\.\d{2}'

if re.match(invoice_number, s):
    # classify as invoice-number
elif re.match(invoice_date, s):
    # classify as invoice-date
elif re.match(vendor_name, s):
    # classify as vendor-name
elif re.match(email, s):
    # classify as email
elif re.match(net_amount, s):
    # classify as net-amount
else:
    # OOPS!!!

尝试找出 类 之间的差异。例如,我可以看到发票编号往往是字母和数字的混合,日期可能包含 / 或 -,电子邮件必须包含 @,最后净额将完全由数字组成。如果您可以使用这些属性,我相信您可以轻松地对它们进行分类。

否则,如果更难,您可以尝试使用 NLTK,但我不知道这对这个示例的效果如何。