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

UnicodeDecodeError:“ascii”编解码器无法解码Textranking代码中的字节[重复]

谢昂雄
2023-03-14

当我执行下面的代码时

import networkx as nx
import numpy as np
from nltk.tokenize.punkt import PunktSentenceTokenizer
from sklearn.feature_extraction.text import TfidfTransformer, CountVectorizer

def textrank(document):
    sentence_tokenizer = PunktSentenceTokenizer()
    sentences = sentence_tokenizer.tokenize(document)

    bow_matrix = CountVectorizer().fit_transform(sentences)
    normalized = TfidfTransformer().fit_transform(bow_matrix)

    similarity_graph = normalized * normalized.T

    nx_graph = nx.from_scipy_sparse_matrix(similarity_graph)
    scores = nx.pagerank(nx_graph)
    return sorted(((scores[i],s) for i,s in enumerate(sentences)), reverse=True)

fp = open("QC")    
txt = fp.read()
sents = textrank(txt)
print sents

我得到以下错误

Traceback (most recent call last):
  File "Textrank.py", line 44, in <module>
    sents = textrank(txt)
  File "Textrank.py", line 10, in textrank
    sentences = sentence_tokenizer.tokenize(document)
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py", line 1237, in tokenize
    return list(self.sentences_from_text(text, realign_boundaries))
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py", line 1285, in sentences_from_text
    return [text[s:e] for s, e in self.span_tokenize(text, realign_boundaries)]
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py", line 1276, in span_tokenize
    return [(sl.start, sl.stop) for sl in slices]
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py", line 1316, in _realign_boundaries
    for sl1, sl2 in _pair_iter(slices):
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py", line 311, in _pair_iter
    for el in it:
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py", line 1291, in _slices_from_text
    if self.text_contains_sentbreak(context):
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py", line 1337, in text_contains_sentbreak
    for t in self._annotate_tokens(self._tokenize_words(text)):
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py", line 1472, in _annotate_second_pass
    for t1, t2 in _pair_iter(tokens):
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py", line 310, in _pair_iter
    prev = next(it)
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py", line 577, in _annotate_first_pass
    for aug_tok in tokens:
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py", line 542, in _tokenize_words
    for line in plaintext.split('\n'):
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 9: ordinal not in range(128)

我正在Ubuntu中执行代码。为了得到文本,我参考了这个网站https://uwaterloo.ca/institute-for-quantum-computing/quantum-computing-101.我创建了一个QC文件(不是QC.txt),并将数据逐段复制粘贴到该文件中。请帮我解决这个错误。非常感谢。

共有1个答案

宰父衡
2023-03-14

请尝试一下,如果以下方法对您有效。

import networkx as nx
import numpy as np
import sys

reload(sys)
sys.setdefaultencoding('utf8')

from nltk.tokenize.punkt import PunktSentenceTokenizer
from sklearn.feature_extraction.text import TfidfTransformer, CountVectorizer

def textrank(document):
    sentence_tokenizer = PunktSentenceTokenizer()
    sentences = sentence_tokenizer.tokenize(document)

    bow_matrix = CountVectorizer().fit_transform(sentences)
    normalized = TfidfTransformer().fit_transform(bow_matrix)

    similarity_graph = normalized * normalized.T

    nx_graph = nx.from_scipy_sparse_matrix(similarity_graph)
    scores = nx.pagerank(nx_graph)
    return sorted(((scores[i],s) for i,s in enumerate(sentences)), reverse=True)

fp = open("QC")    
txt = fp.read()
sents = textrank(txt.encode('utf-8'))
print sents
 类似资料:
  • 如何修复它? 在其他一些基于python的静态博客应用程序中,可以成功发布中文帖子。例如此应用程序:http://github.com/vrypan/bucket3.在我的网站http://bc3.brite.biz/,可以成功发布中文帖子。

  • 问题内容: 如何解决? 在其他基于python的静态博客应用中,中文帖子可以成功发布。像这个程序:http : //github.com/vrypan/bucket3。在我的网站http://bc3.brite.biz/中,中文帖子可以成功发布。 问题答案: tl;dr / quick fix 不要对Willy Nilly进行解码/编码 不要以为你的字符串是UTF-8编码的 尝试在代码中尽快将字符

  • 我在尝试将字符串编码为UTF-8时遇到了一些问题。我尝试过很多方法,包括使用和,但我得到了错误: UnicodeDecodeError:“ascii”编解码器无法解码位置1中的字节0xef:序号不在范围内(128) 这是我的字符串: 我不知道出了什么问题,知道吗? 编辑:问题是打印字符串不能正确显示。此外,当我试图转换它时,这个错误:

  • 问题内容: 我有一个套接字服务器,应该从客户端接收UTF-8有效字符。 问题是某些客户端(主要是黑客)正在通过它发送所有错误的数据。 我可以轻松地区分真正的客户端,但是我会将所有发送的数据记录到文件中,以便以后进行分析。 有时我会得到这样的导致错误的字符。 我需要能够使带有或不带有这些字符的字符串UTF-8。 更新: 对于我的特殊情况,套接字服务是MTA,因此我只希望接收ASCII命令,例如: 我

  • 我有一个套接字服务器,它应该从客户端接收UTF-8有效字符。 问题是一些客户端(主要是黑客)正在通过它发送所有错误类型的数据。 我可以很容易地分辨出真正的客户机,但我会将发送的所有数据记录到文件中,以便以后进行分析。 有时我会遇到这样的字符,导致UnicodeDecodeError错误。 我需要能够使字符串UTF-8有或没有这些字符。 更新: 对于我的特殊情况,套接字服务是MTA,因此我只希望接收

  • 问题内容: 我有一个套接字服务器,应该从客户端接收UTF-8有效字符。 问题是某些客户端(主要是黑客)正在通过它发送所有错误的数据。 我可以轻松地区分真正的客户端,但是我会将所有发送的数据记录到文件中,以便以后进行分析。 有时我会收到这样的字符œ,从而导致错误。 我需要使字符串UTF-8带有或不带有这些字符。 更新: 对于我的特殊情况,套接字服务是MTA,因此我只希望接收ASCII命令,例如: 我

  • 问题内容: 我想制作搜索引擎,并按照某些网络中的教程进行操作。我想测试解析html 它得到错误 我在网上看到了一些使用encode()的解决方案。但是我不知道如何在代码中插入encode()函数。谁能帮我? 问题答案: 在Python 3中,文件会以文本(解码为Unicode)的形式为您打开。您无需告诉BeautifulSoup要解码的编解码器。 如果数据解码失败,那是因为您没有告诉调用文件读取文

  • 问题内容: 当上传具有非ASCII字符的文件时,出现UnicodeEncodeError: 我使用MySQL,nginx和FastCGI运行Django 1.2。 根据Django Trac数据库,这是已解决的问题,但是我仍然有问题。欢迎提供有关如何修复的任何建议。 编辑:这是我的图像字段: 问题答案: 在对此进行更多调查之后,我发现我尚未在我的主要Nginx配置文件中设置字符集: 通过添加以上内