当前位置: 首页 > 知识库问答 >
问题:

如何使用分类词词典从文本片段中提取特定词?

东方辉
2023-03-14

我想从数据帧中的文本中提取特定的单词。这些单词我已经输入到字典的列表中,它们属于某些类别(键)。由此,我想创建与存储单词的类别相对应的列。和往常一样,最好用例子来说明:

我有一个数据框:

df = pd.DataFrame({'Text': ["This car is fast, agile and large and wide", "This wagon is slow, sluggish, small and compact with alloy wheels"]}  )  

它创建表:

    Text
0   This car is fast, agile and large and wide
1   This wagon is slow, sluggish, small and compact with alloy wheels

还有一本我想从中提取的分类词词典。这些单词都是没有符号的自然语言单词,可以包括短语,例如本例中的“alloy wheels”(这不一定是字典,我只是觉得这是最好的方法):

myDict = {
  "vehicle": ["car", "wagon"],
  "speed": ["fast", "agile", "slow", "sluggish"],
  "size": ["large", "small", "wide", "compact"]
  "feature": ["alloy wheels"]
}

根据这个,我想创建一个如下所示的表:

|     Text                                                          | vehicle | speed          | size           | feature      |
| ----------------------------------------------------------------- | ------- | -------------- | -------------- | ------------ |
| This car is fast, agile and large and wide                        | car     | fast, agile    | large, wide    | NaN          |
| This wagon is slow, sluggish, small and compact with allow wheels | wagon   | slow, sluggish | small, compact | alloy wheels |

为提前求助干杯!很想使用正则表达式,但欢迎任何解决方案!

共有1个答案

邓俊英
2023-03-14

有很多方法可以解决这个问题。我可以从一个方法开始:定义一个函数,如果它们与你的句子匹配,它将返回一个单词列表。

    def get_matching_words(sentence, category_dict, category):
        
        matching_words = list()

        for word in category_dict[category]:
             if word in sentence:
                   matching_words.append(word)

        return matching_words

然后,您希望将此函数应用于数据帧。

    df["vehicle"] = df.apply(lambda x: get_matching_words(x, "vehicle", my_dict)

    df["speed"] = df.apply(lambda x: get_matching_words(x, "speed", my_dict)

这里要添加的唯一内容是将列表连接成字符串,而不是返回列表。

def get_matching_words(sentence, category_dict, category):
        
        matching_words = list()

        for word in category_dict[category]:
             if word in sentence:
                   matching_words.append(word)

        return ",".join(matching_words)

希望这有帮助

 类似资料:
  • 我想读一个文本文件,打印出已知单词前面的单词,比如Java中的xxx。我使用Scanner类用java编写了这段代码。但是这段代码只打印了“xxx”前面的一半单词,而“xxx”前面的一些单词则丢失了。我想知道是什么问题,你能解决这个代码吗。 测试文件包含类似的内容

  • 问题内容: 有谁知道从文本中仅提取名词的最简单方法? 我听说过TreeTagger工具,但尝试尝试一下,但由于某种原因而无法使用。 有什么建议? 谢谢菲尔 编辑: 那是我的代码,英语是语言。我遇到了错误:new TokenHandler(){}类型必须实现继承的抽象方法TokenHandler.token。难道我做错了什么? 问题答案: 首先,您必须标记文本。这看似微不足道(在任何空格处分割都可以

  • 问题内容: 假设您有一个像这样的文本文件:http : //www.gutenberg.org/files/17921/17921-8.txt 有没有人有一个好的算法或开放源代码从文本文件中提取单词?如何获得所有单词,同时避免使用特殊字符,并保留诸如“ it’s”之类的内容… 我在用Java工作。谢谢 问题答案: 这听起来像是正则表达式的正确工作。如果您不知道如何开始,以下是一些Java代码,可以

  • 问题内容: 有更有效的方法吗?我的代码读取一个文本文件并提取所有名词。 如何减少此代码的时间复杂度?有没有办法避免使用嵌套的for循环? 提前致谢! 问题答案: 如果您不接受其他选项,请签出。它可以轻松提取所有名词和名词短语:

  • 问题内容: 我正在尝试获取词典列表中所有键的列表,以便填写csv.DictWriter的fieldnames参数。 以前,我有这样的事情: 我当时习惯于使用列表中的第一本字典并提取其键。 现在我有了类似的东西,其中一个字典比另一个字典具有更多的key:value对(可能是任何结果)。新密钥是根据来自API的信息动态添加的,因此它们可能会或可能不会出现在每个字典中,而且我事先也不知道会有多少个新密钥

  • 问题内容: 好的,所以我有这个yaml文件,我想替换一个字符串 与字符串 但是我不知道该怎么办。这是完整的Yaml文件 问题答案: 假设您使用的操作系统不错,并且您的YAML文档称为: