【问题标题】:Text Mining in R - how to exclude full phrases/sentences from text analysisR中的文本挖掘 - 如何从文本分析中排除完整的短语/句子
【发布时间】:2020-05-28 19:01:49
【问题描述】:

我正在对一项调查进行大约 160 条单独的回复。在清理之后,我运行了 R 代码来生成一个简单的 wordcloud 和一些敏感性分析。 但是,分析包括要求受访者完成的模板中的所有文本,例如介绍性文本、说明、姓名、公司、地址,以及所有部分标题和提出的问题。 由于所有这些模板文本都将针对 160 个响应中的每一个重复,因此会扭曲响应中单词的频率。 R 中是否有一种方法不仅可以排除单个单词(根据停用词或创建 mystopwords),还可以从分析中排除完整的句子或短语,以便模板中的所有文本都可以被忽略并且不包含在响应集中? 由于保密,我无法分享回复,但我可以分享包含我希望从分析中排除的所有文本的空白模板,可在https://www.economy-ni.gov.uk/energy-strategy-call-for-evidence 获得。

R 中的虚拟数据:

[50] “2. 北爱尔兰的能源”
[51] “Q1。在解决能源问题方面,我们可以从其他地方学到什么教训”
[52]“总体气候行动框架?”
[53]“Q2。北爱尔兰能源脱碳的主要考虑因素是什么”
[54] “与其他司法管辖区现有联系的部门?”
[55] 《Q3.北爱尔兰应在多大程度上实施关键能源相关》
[56] “CCC‘减少北爱尔兰排放’的建议”
[57] “报告?”
[58]“Q4。你同意30年的时间框架吗?如果不同意,请说明你的首选”
[59]《方法与理由》。
[60] “受访者回复文字 xxxxxxxx blahblahvlahblah”
[61] “3. 北爱尔兰的能源转型”
[62]《Q5.北爱尔兰有哪些独特的特色需要》
[63] “是否考虑过净零碳能源转型?”
[64]“Q6.贵组织是否正在开展或计划开展支持项目”
[65]“能源转型?如果是,请提供更多细节。”
[66] “受访者回复文本 xxxxxxxx blahblahvlahblah”

在这个数据子集中,我希望排除第 50 到 59 行和第 61 到 65 行中的标准文本,因为它们在所有响应中都包含相同的文本,即所有响应中的每一行每次都以相同的文本开头.

响应者响应文本开头的行只是用于说明目的的虚拟数据,并且每次响应一个部分/问题时都会有所不同。在此示例中,我将寻求将文本保留在第 60 行和第 66 行中以进行分析。

要排除的标准文本在每个响应/文件中并不总是相同的行号。这是由于响应运行在多行上造成的。

谢谢 斯蒂芬

【问题讨论】:

  • 您需要更清楚地描述您认为是“标准文本”的内容,您似乎想要排除这些内容,以及您似乎想要保留的“回复”。该描述需要包括“规则”;例如,回复是否总是以“Respondent response text”开头,标准文本是否总是以“Q + number + period”开头,等等。给定一组这样的规则,挖掘您的文本数据绝对是可行的。此外,您帖子的最后一句话在语法上难以解析,从而导致读者难以理解。
  • 嗨,克里斯。对这一切都是新手,并了解我需要变得更好,因此感谢这些提示。我已经编辑了上面的文字,但简要说明了规则:对问题的回答可以从任何东西开始,注意标准。标准元素是标题(2. 能量等)和问题(以 Q 或下一行开头,以 ? 结尾)。这些标准元素是我希望从文本分析中排除的元素。
  • 抱歉,仍然不清楚:在您的帖子中,您说您要“保留第 60 行和第 66 行中的文本以供分析”,但在评论中您说“标准元素是标题 (2.能源等)”,你想排除。但是第 61 行“”3。北爱尔兰的能源转型”似乎就是这样一个标题。
  • 因此,您要提取的文本始终以““Respondent response text xxxxxxxx blahblahvlahblah”开头,并以部分编号+句点或Q加数字加句点结尾?
  • 好的,这样结束点就清楚了。但是你还需要为开始定义某种规则。

标签: r text-mining


【解决方案1】:

不确定你想要的部分是否总是以'Respondent ...'开头,但如果是这样,你可以做一些简单的事情,比如

library(tidyverse)

df %>% 
filter(str_starts(your_data_column, 'Respondent'))

【讨论】:

  • 感谢 CER。我也许可以反过来使用它。文档中的问题在每个响应文件中都是相同的文本,而响应者文本在每个文件中会有所不同,即我要保留的部分并不总是以“响应者”开头。这只是为了说明目的而添加的。
【解决方案2】:

这是解决您的文本挖掘问题的初步方法(最初考虑到定义规则的困难)。

首先,一些数据(注意我添加了更多的响应字符串):

x <- c("2. Energy in Northern Ireland",
       "Q1. What lessons can we learn from elsewhere in addressing energy within an",
       "overarching climate action framework?",
       "Q2. What are the key considerations for decarbonising Northern Ireland’s energy",
       "sector given existing linkages to other jurisdictions?",
       "Q3. To what extent should Northern Ireland implement the key energy-related",
       "recommendations from the CCC ‘Reducing Emissions in Northern Ireland’",
       "report?",
       "Q4. Do you agree with the 30-year timeframe? If not, please state your preferred",
       "approach and reasons.",
       "Respondent response text xxxxxxxx blahblahvlahblah",
       "blahblablah and so on",
       "3. The Energy Transition in Northern Ireland",
       "Q5. What are the unique characteristics of Northern Ireland that need to be",
       "considered in a net zero carbon energy transition?",
       "Q6. Is your organisation undertaking or planning to undertake projects to support",
       "the energy transition? If so, please provide further details.",
       "Respondent response text xxxxxxxx blahblahvlahblah",
       "blah blah blah and so on",
       "some more blah blah")

现在的解决方案首先将字符串与paste 粘贴在一起,然后使用gsub 删除出现在(标题)数字和? 之间的部分以及以If 开头的句子:

trimws(gsub("\\d.*\\?|If.*\\.", "", paste(x, collapse = " ")))

结果:

[1] "Respondent response text xxxxxxxx blahblahvlahblah blah blah blah and so on some more blah blah"

这对你有帮助吗?

【讨论】:

  • 克里斯,感谢您的帮助和耐心等待。我的初始代码已经折叠了数据,并且想再次运行它导致了一个问题,因为运行这一新行后文本结果非常少。我的初始代码以及您建议的行 hello
  • # 设置文本文件文件夹的路径.txt") # 设置向量文件列表.txt")
  • # set vector filelist
  • # 应用一个函数来读取多个 txt 文件 - 警告是可以的 a
  • 抱歉,我不确定我是否理解这一点,您需要我对这段代码做些什么吗?
猜你喜欢
  • 2019-06-04
  • 2019-05-05
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
相关资源
最近更新 更多