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



我只是在工作,以为文本教程带有数据集模块外的数据。我从数据框架中获取了一些文本数据,并且将其作为工作的字符串变量存储。

def mergeText(df):
    content = ''
    for i in df['textColumn']:
        content += (i + '. ' )
    #print(content)
    return content

     txt = mergeText(df)

我与Spacy合作了一点,我知道这是创建DOC对象的标准方法

nlp = spacy.load('en')
doc1 = nlp(txt)
print(type(doc1))

输出

class 'spacy.tokens.doc.Doc

因此,我应该能够从该文档文件中生成库,如文档所说

corpus = textacy.corpus.Corpus('en', docs=doc1)

,即使我将正确的类型传递给函数

,我也会遇到此错误
---------------------------------------------------------------------------
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'>"

我试图以相同的方式创建一个文本对象,但没有运气

doc = textacy.Doc(txt)
print(type(doc))
<class 'spacy.tokens.doc.Doc'>

我还试图将paramater用于传递原始文本的comparater,但输出

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")]

关于如何解决此问题的任何想法?

编辑为了使文档形成许多行,并将其传递给语料库,这是我正在使用的数据框架

 chat1 = df[(df['chat_hash']=='121418-456986')]

因此,每个文本的文本都存储在"文本"列下方,并且每个文本都可以通过扬声器列绑定到扬声器。

当前我正在查看国会大厦单词示例,但尚不清楚如何使用数据框架分开此词。

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

在这种情况下,是否是设置记录的情况,是聊天哈希

的过滤器
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

docs参数期望具有各种 Doc类型的估计,而估计的项目则是。您正在传递一个文档,当迭代返回 Tokens时,该文档 - 因此错误。您可以将doc=doc1参数包裹为doc=[doc1],这应该使您可以创建语料库。

这是一个包含单个文档的语料库,这不太可能非常有用。您是要为您的数据框架的每一行创建一个文档,而不是串联在一起吗?

编辑:处理DataFrame

如果您希望每个聊天成为文档,那么这样做的之一就是通过chat_hash将数据框架分组,并将所有文本混合在一起。然后为每个聊天创建一个文档,并为此进行语料库:

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

因此,其中的步骤是:

  • 加载模型(在这种情况下创建虚拟数据框)
  • 按哈希和某个序列进行排序(因此以正确的顺序聊天),然后按聊天哈希进行分组,然后将所有文本加入(我使用文本之间的新行,都可以使用任何定界数
  • 将函数应用于每个文本块以创建一个文档
  • 像以前一样创建语料库。

相关内容

  • 没有找到相关文章

最新更新