[英]NLP - text extraction in Python using spaCy
我使用Python和spaCy作为我的NLP库。 我是NLP工作的新手,希望能提供一些指导,以便从文本中提取表格信息。 我的目标是找到冻结或不冻结哪种类型的费用。 任何指导将不胜感激。
TYPE_OF_EXPENSE FROZEN? NOT_FROZEN?
purchase order frozen null
capital frozen null
consulting frozen null
business meetings frozen null
external hires frozen null
KM&L null not frozen
travel null not frozen
import spacy
nlp = spacy.load('en_core_web_sm')
doc = nlp(u'Non-revenue-generating purchase order expenditures will be frozen. All capital
related expenditures are frozen effectively for Q4. Following spending categories
are frozen: Consulting, (including existing engagements), Business meetings.
Please note that there is a hiring freeze for external hires, subcontractors
and consulting services. KM&L expenditure will
not be frozen. Travel cost will not be on ‘freeze’.)
我的最终目标是将所有此表提取到excel文件中。 即使您能为上述几个类别提供建议,我也将深表感谢。 提前非常感谢您。
几个问题:类别是否已预定义,并且会保持这种方式吗? 如果是这样,您可以仅使用这些单词来构建一个小的词汇表并进行处理。 第二件事是首先进行基本的预处理,例如大小写调整等。
然后使用某种类型的句子标记器将您的输入分成多个句子。 完成此操作后,将这些句子拆分为标记,nltk将提供一个不错的标记生成器,您可以使用它定义短语,以便将纽约标记为new_york,依此类推。 对每个句子进行标记后,如果您在句子中找到匹配的标记,则可以使用基于窗口的方法。在该句子中,您查找前后有4个标记,以找到冻结单词的否定词。 因此,对于一个句子,您可以获得诸如
[All,capital,related,expenditures,are,frozen,effectively,for,Q4]
这会同时匹配冻结关键字和大写关键字。 只需检查冻结前后的窗口大小是否为负,如果发现冻结的标记大写为False,否则将其标记为true,因为可以使用二进制true / false列轻松完成此操作。
如果您给出的示例是您工作中的常见示例,则可以将任务分解为以下步骤:
使用Spacy定义规则以描述句子的模式。 例如KM&L expenditure will not be frozen
可以是[{"lower":{"REGEX": "^.*expenditure"}},{"lower":"not"}, {"LEMMA":"be"}, {"LOWER": "frozen"}]
(我没有对其进行测试,因此请相应地进行更改)。 您可能需要编写尽可能多的规则。
使用NLTK Tokenize将段落分为句子( 请参阅示例 )
对于每个句子,请使用Spacy中基于规则的匹配
要提取TYPE_OF_EXPENSE
,请根据匹配的规则,通过对匹配语句中从前或后的字符进行计数来获取子字符串KM&L
。 例如,在此句子中KM&L expenditure will not be frozen
,您可以从后面进行计数,因为规则中定义了expenditure will not be frozen
,并且字符串的长度是固定的。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.