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

是否可以在spaCy中排除某些POS标签?python

方祺
2023-03-14

我想通过在动词前加一个“X”来标记动词在句子中的位置。我的函数采取以下步骤来实现这一点。

  1. 找到动词。我使用spaCy进行POS标记。SpaCy输出一个我称之为pos的POS标签列表,其中句子中的每个单词都表示为一个标签。
  2. 将句子也转换为列表L
  3. 确定POS列表中动词标签(例如"VBZ")的索引x
  4. 在索引x处插入所需的“X”标记到句子列表中。

第4步假设列表pos的长度与句子列表L的长度相同。通常情况下是这样的,除非spaCy将标签分配给Python没有单独索引的句子元素。在这种情况下,POS列表比句子列表长。例如,spaCy将单词“.”后面的括号“(”或句号视为单独的位置,而Python没有。因此,“X”在句子中错位了。

如何解决这个问题?

下面是一个例子。

import pandas as pd
import spacy
nlp = spacy.load('en')

s = "Dr. John (a fictional chartacter) never shakes hands."
df = pd.DataFrame({'sentence':[s]})
k = df['sentence']

def marking(row):
    L = row
    sentence_spacy = nlp(L)
    pos = [] # store the pos tags in a list 'pos'
    for token in sentence_spacy:
        pos.append(token.tag_)
        print(pos)
    if "VBZ" in pos:
        x = pos.index("VBZ")
        L = L.split()
        L.insert(x, "X")
        L = " ".join(L) # split the sentence also in a list
        print(L)
        return L
x = k.apply(marking)
print(x)    

这使得:

pos = ['NNP', 'NNP', '-LRB-', 'DT', 'JJ', 'NN', '-RRB-', 'RB', 'VBZ', 'NNS', '.']
L = ['Dr.', 'John', '(a', 'fictional', 'chartacter)', 'never', 'shakes', 'hands.']

由于pos listpos比句子listL长,结果是:

 x = "Dr. John (a fictional chartacter) never shakes hands. X"

但我想要这个:

x = "Dr. John (a fictional chartacter) never X shakes hands."

我的问题有两个方面:

>

  • 是否可以在spaCy中排除某些POS标签?例如,我是否可以排除['-LRB-'、'-RRB-'等]?这将使长度pos==长度L

    如果这是不可能的,我应该如何更改我的功能,以便可以指定从POS中删除的POS标签列表['-LRB-','-RRB-'等],从而使POS列表的长度与句子列表的长度相同?

  • 共有1个答案

    包承望
    2023-03-14

    令牌化比拆分更复杂。即使丢弃令牌也不会使拆分对应于spaCy的令牌(尝试nlp('non-平凡'))。幸运的是,有一个更好的方法:您可以从令牌中重建句子并在所需的位置插入您的标记:

    def marking(row):
        chunks = []
        for token in nlp(row):
            if token.tag_ == 'VBZ':
                chunks.append('X')
            chunks.append(token.text_with_ws)
        return ' '.join(chunks)
    
    print(marking("Dr. John (a fictional chartacter) never shakes hands."))
    
     类似资料:
    • 我正在尝试构建一个非英语拼写检查器,它依赖于spaCy对句子的分类,这使我的算法能够使用POS标记和单个标记的语法依赖性来确定拼写错误(在我的例子中,更具体地说:荷兰语复合词中的错误拆分)。 然而,如果句子包含语法错误,spaCy似乎会错误地对句子进行分类,例如,将名词归类为动词,即使分类的单词看起来根本不像动词。 正因为如此,我想知道是否有可能获得斯帕西分类的不确定性,从而有可能判断斯帕西是否在

    • 问题内容: 如何找到包含自然语言工具包(nltk)使用的所有可能pos标记的列表? 问题答案: 这本书有一个注释,说明如何在标签集上寻求帮助,例如: 其他人可能相似。(注意:也许您首先需要为此从下载助手的“ 模型” 部分进行下载)

    • 检查第一个数字参数是否可被第二个数字整除。 使用模运算符(%)来检查余数是否等于 0 。 const isDivisible = (dividend, divisor) => dividend % divisor === 0; isDivisible(6, 3); // true

    • Lombok项目的类注释,ToString,用于在其注释的类内自动生成一个ToString()方法。 对于这个类: 调用生成的toString()方法将生成以下输出: 注释的可选元素可用于包含或排除特定字段,但我想知道的是... 可能类似于:

    • 问题内容: 这是根据官方文档提供的信息: 在PHP中可以使用四对不同的开始和结束标记。其中的两个和始终可用。另外两个是短标签和ASP样式标签,可以从php.ini配置文件中打开和关闭。因此,尽管有些人发现短标签和ASP样式标签很方便,但它们的可移植性较差, 通常不建议这样做 。 以我的经验,大多数服务器 确实 启用了短标签。打字 比打字要方便得多 程序员的便利性是一个重要因素,那么 为什么 不推荐

    • 问题内容: 标签中可以包含哪些有效的html元素(如果有)? 问题答案: 内联元素(除其他外)可以包含其他内联元素和文本节点。锚点可以包含一个范围,该范围可以包含一个文本节点。 通常,块级元素可以包含内联元素和其他块级元素。通常,内联元素可以仅包含数据和其他内联元素。这种结构上的区别固有的思想是,块元素比内联元素创建“更大”的结构。 在其他的答案指出,你不能嵌套的在。