首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从textacy.doc.Doc类创建语料库

无法从textacy.doc.Doc类创建语料库
EN

Stack Overflow用户
提问于 2017-12-11 15:03:54
回答 1查看 1.1K关注 0票数 1

我只是在思考在数据集模块之外的文本教程进行工作。我从dataframe获得一些文本数据,并将其存储为字符串变量以供工作。

代码语言:javascript
复制
def mergeText(df):
    content = ''
    for i in df['textColumn']:
        content += (i + '. ' )
    #print(content)
    return content


     txt = mergeText(df)

我对spacy做了一些工作,我知道这是创建doc对象的标准方法

代码语言:javascript
复制
nlp = spacy.load('en')
doc1 = nlp(txt)
print(type(doc1))

哪种输出

代码语言:javascript
复制
class 'spacy.tokens.doc.Doc

因此,我应该能够从这个文档文件中生成一个语料库。

代码语言:javascript
复制
corpus = textacy.corpus.Corpus('en', docs=doc1)

但是我得到了这个错误,即使我把正确的类型传递给函数

代码语言:javascript
复制
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-8-c6f568014162> in <module>()
----> 1 corpus = textacy.corpus.Corpus('en', docs=doc1, metadatas=None)

~/anaconda3/envs/nlp/lib/python3.6/site-packages/textacy/corpus.py in __init__(self, lang, texts, docs, metadatas)
    156             else:
    157                 for doc in docs:
--> 158                     self.add_doc(doc)
    159 
    160     def __repr__(self):

~/anaconda3/envs/nlp/lib/python3.6/site-packages/textacy/corpus.py in add_doc(self, doc, metadata)
    337             msg = '`doc` must be {}, not "{}"'.format(
    338                 {Doc, SpacyDoc}, type(doc))
--> 339             raise ValueError(msg)
    340 
    341     #################

ValueError: `doc` must be {<class 'textacy.doc.Doc'>, <class 'spacy.tokens.doc.Doc'>}, not "<class 'spacy.tokens.token.Token'>"

我尝试以同样的方式创建textacy对象,但没有运气。

代码语言:javascript
复制
doc = textacy.Doc(txt)
print(type(doc))

<class 'spacy.tokens.doc.Doc'>

我还尝试使用文本参数作为语料库,将原始文本传递给它,但这是输出。

代码语言:javascript
复制
corpus[:10]

[Doc(1 tokens; "D"),
 Doc(1 tokens; "e"),
 Doc(1 tokens; "a"),
 Doc(1 tokens; "r"),
 Doc(1 tokens; " "),
 Doc(1 tokens; "C"),
 Doc(1 tokens; "h"),
 Doc(1 tokens; "r"),
 Doc(1 tokens; "i"),
 Doc(1 tokens; "s")]

有什么办法解决这个问题吗?

编辑,以便获得许多行的文档,并将其传递给一个语料库,这里是我正在处理的线程的数据框架

代码语言:javascript
复制
 chat1 = df[(df['chat_hash']=='121418-456986')]

因此,每个文本的文本存储在“文本”列下,如果有必要,每个文本可以通过扬声器列绑定到发言者。

目前,我正在查看国会山话示例,但还不完全清楚如何使用dataframe将其拆分。

代码语言:javascript
复制
records = cw.records(speaker_name={'Hillary Clinton', 'Barack Obama'})
text_stream, metadata_stream = textacy.fileio.split_record_fields(records, 'text')
corpus = textacy.Corpus('en', texts=text_stream, metadatas=metadata_stream)
corpus

在本例中,是否将记录设置为聊天哈希的筛选器?

代码语言:javascript
复制
thread = df[(df['chat_hash']=='121418-456986')]
text_stream, metadata_stream = textacy.fileio.split_record_fields(thread, 'text')
corpus = textacy.Corpus('en', texts=text_stream, metadatas=metadata_stream)
corpus
EN

回答 1

Stack Overflow用户

发布于 2017-12-11 17:39:14

docs参数需要一个可迭代的,可迭代的项是各种Doc类型的。您正在传递一个文档,在迭代时该文档返回Tokens -因此出现了错误。您可以将doc=doc1参数包装为doc=[doc1],这将允许您创建语料库。

不过,这是一个包含单一文档的语料库--这不太可能非常有用。您是否打算为您的DataFrame的每一行创建一个Doc,而不是将它们连接在一起?

编辑:处理DataFrame

如果您希望每一次聊天都是一个文档,其中之一就是将数据按chat_hash分组,并将所有文本连接在一起。然后为每一次聊天创建一个文档,并为此创建一个语料库:

代码语言:javascript
复制
import pandas as pd
import spacy
import textacy

nlp = spacy.load('en')

df = pd.DataFrame([['Ken', 'aaaa', 1, 'This is a thing I said'],
                  ['Peachy', 'aaaa', 2, 'This was a response'],
                  ['Ken', 'aaaa', 3, 'I agree!'],
                  ['Ken', 'bbbb', 1, 'This is a thing I said'],
                  ['Peachy', 'bbbb', 2, 'You fool!']], columns=['speaker', 'chat_hash', 'sequence_number', 'text'])

chat_concat = (df
               .sort_values(['chat_hash', 
                             'sequence_number'])
               .groupby('chat_hash')['text']
               .agg(lambda col: '\n'.join(col)))

docs = list(chat_concat.apply(lambda x: nlp(x)))

corpus = textacy.corpus.Corpus(nlp, docs=docs)

corpus

下面的步骤是:

  • 加载模型(并在本例中创建虚拟数据)
  • 按散列和某些序列排序(所以按正确的顺序聊天),然后按聊天哈希分组并将所有文本连接在一起(我在文本之间使用新行,可以使用任何分隔符)
  • 对每一个文本块应用一个函数来创建一个文档。
  • 像以前一样创建语料库。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47755724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档