我有一个整洁的数据集,其中的列包含文本响应(即在赠款申请中),而行作为申请赠款的单个组织。我正在尝试查找与特定单词分组在一起的主题和短语(例如“ funder” /“ funding”)。更具体地说,哪些形容词和动词与这些标记组合在一起?
例如
private void tbSource_KeyUp(object sender, KeyEventArgs e)
{
string appendTag, selectedText;
appendTag = string.Empty;
if (e.Control)
{
selectedText = tbSource.SelectedText;
switch (e.KeyCode)
{
case Keys.U:
appendTag = @"<U>{0}</U>";
break;
case Keys.B:
appendTag = @"<B>{0}</B>";
break;
case Keys.R:
appendTag = @"<ruby>{0}<rt></rt></ruby>";
break;
case Keys.T:
appendTag = @"( )";
break;
default:
appendTag = @"";
break;
}
if (e.KeyCode == Keys.U || e.KeyCode == Keys.B || e.KeyCode == Keys.R)
{
selectedText = string.Format(appendTag, selectedText);
tbSource.SelectedText = selectedText;
}
else {
tbSource.AppendText(appendTag);
}
}
}
因此,“资金”可以与动词(如“创建”,“雇用”)和形容词短语(如“新网站”,“有才华的人”)组合在一起。
我正在R中进行此操作。是否有人建议使用此程序包或程序?我找到了cleanNLP,但不确定这是否是最方便的软件包。我需要标记所有单词吗?如果是这样,我对短语进行分组会不会有问题?
我对NLP /文本挖掘还很陌生,因此我对介绍性问题表示歉意。
谢谢!
答案 0 :(得分:1)
这是一个值得探索的广阔领域。
我强烈建议您阅读tidytextmining书籍和软件包,以及作者的个人博客(https://juliasilge.com,http://varianceexplained.org),那里有大量出色的工作可以帮助您入门,而且对于NLP的新手来说,它的编写非常好。
widyr和udpipe库对于您正在寻找的内容也非常有帮助。
这里有两个例子: 使用widyr,我们可以查看一个词(例如,资金)和与之相关的所有其他词之间的成对pmi。有关PMI的信息,请查看:https://stackoverflow.com/a/13492808/2862791
library(tidytext)
library(tidyverse)
texts <- tibble(text = c('This funding would help us create a new website and hire talented people',
'this random funding function talented people',
'hire hire hire new website funding',
'fun fun fun for all'))
tidy_texts %>%
pairwise_pmi(word, id) %>%
filter(item1 == 'funding') %>%
top_n(5, wt = pmi) %>%
arrange(desc(pmi))
item1 item2 pmi
<chr> <chr> <dbl>
1 funding this -0.0205
2 funding would -0.0205
3 funding help -0.0205
4 funding us -0.0205
因此,要介绍形容词和短语,您可以按照boski的建议查看udpipe。 我还将重现上面的内容以计算PMI,因为它是一种非常直观,快速的度量标准
library(udpipe)
english <- udpipe_download_model(language = "english")
ud_english <- udpipe_load_model(english$file_model)
tagged <- udpipe_annotate(ud_english, x = texts$text)
tagged_df <- as.data.frame(tagged)
tagged_df %>%
filter(upos == 'ADJ' |
token == 'funding') %>%
pairwise_pmi(token, doc_id) %>%
filter(item1 == 'funding')
item1 item2 pmi
<chr> <chr> <dbl>
1 funding new 0.170
2 funding talented 0.170
您已经提到了cleanNLP,它是用于此类工作的出色库。这样可以轻松访问udpipe和spacyr以及其他一些方法来完成该形容词发现所需的标记和标记。
如果您可以跳过设置详细信息,则spacyr是我的首选,因为它速度最快,但是如果速度不是问题,我会选择udpipe,因为它非常易于使用。
我需要标记所有单词吗?如果是这样,我对短语进行分组会不会有问题?
因此udpipe和其他文本注释器对此有一个解决方案。 在udpipe中,您可以使用'keywords_collocation()'来识别出现频率比随机机会高出预期的单词。
我们需要一个比我上面写的三个垃圾句子更大的文本数据集,以得到可重复的示例。
但是您可以通过此博客找到很多信息: https://bnosac.github.io/udpipe/docs/doc7.html
很抱歉,此回复有点像是链接的集合……但是正如我所说的,这是一个很大的研究领域。