在python中使用langdetect时出错:“文本中没有特征”

use*_*275 11 python text-analysis language-detection

嘿,我有一个带有多语言文本的 csv。我想要的只是一个附加了检测到的语言的列。所以我编码如下,

from langdetect import detect 
import csv
with open('C:\\Users\\dell\\Downloads\\stdlang.csv') as csvinput:
with open('C:\\Users\\dell\\Downloads\\stdlang.csv') as csvoutput:
writer = csv.writer(csvoutput, lineterminator='\n')
reader = csv.reader(csvinput)

    all = []
    row = next(reader)
    row.append('Lang')
    all.append(row)

    for row in reader:
        row.append(detect(row[0]))
        all.append(row)

    writer.writerows(all)
Run Code Online (Sandbox Code Playgroud)

但我收到的错误是 LangDetectException: No features in text

回溯如下

runfile('C:/Users/dell/.spyder2-py3/temp.py', wdir='C:/Users/dell/.spyder2-py3')
Traceback (most recent call last):

  File "<ipython-input-25-5f98f4f8be50>", line 1, in <module>
    runfile('C:/Users/dell/.spyder2-py3/temp.py', wdir='C:/Users/dell/.spyder2-py3')

  File "C:\Users\dell\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 714, in runfile
    execfile(filename, namespace)

  File "C:\Users\dell\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 89, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/dell/.spyder2-py3/temp.py", line 21, in <module>
    row.append(detect(row[0]))

  File "C:\Users\dell\Anaconda3\lib\site-packages\langdetect\detector_factory.py", line 130, in detect
    return detector.detect()

  File "C:\Users\dell\Anaconda3\lib\site-packages\langdetect\detector.py", line 136, in detect
    probabilities = self.get_probabilities()

  File "C:\Users\dell\Anaconda3\lib\site-packages\langdetect\detector.py", line 143, in get_probabilities
    self._detect_block()

  File "C:\Users\dell\Anaconda3\lib\site-packages\langdetect\detector.py", line 150, in _detect_block
    raise LangDetectException(ErrorCode.CantDetectError, 'No features in text.')
Run Code Online (Sandbox Code Playgroud)

LangDetectException: 文本中没有特征。

这就是我的 csv 的样子 1) 最臭的烟熏最美味的应变止痛药和情绪提升剂 2) 放松、欣快感、surélevée、嗜睡、集中、picotement、une增强 de l'appétit、soulager la douleur Giggly、体质、esprit3) Reduzierte Angst, Ruhe, gehobener Stimmung, zerebrale Energie, Körper Sedierung 4) Calmante, relajante muscular, Relajación Mental, disminución de náuseas 5)???????????????????????? ??

请帮我解决一下这个。

Mar*_*mer 12

您可以使用这样的方法来检测文件中的哪一行抛出错误:

for row in reader:
    try:
        language = detect(row[0])
    except:
        language = "error"
        print("This row throws and error:", row[0])
    row.append(language)
    all.append(row)
Run Code Online (Sandbox Code Playgroud)

您将看到的是它可能在“???????????????????????????”处失败。我的猜测是detect()无法“识别”该行中要分析的任何字符,这就是错误所暗示的。

其他事情,比如当输入只是一个 URL 时,也会导致这个错误。


小智 6

通过与对象发生错误时没有字母detect。至少应该有一封信。

要重现,请运行以下任何命令:

detect('.')
detect(' ')
detect('5')
detect('/')
Run Code Online (Sandbox Code Playgroud)

因此,您可以先应用一些文本预处理来删除row[0]值为空字符串、空值、空格、数字、特殊字符或根本不包含任何字母的记录。


Max*_*ner 5

问题是空文本或类似“ ”的内容,没有任何值;在条件中检查这一点并在列表理解中循环您的读者或

from langdetect import detect   
textlang = [detect(elem) for elem in textlist if len(elem) > 50]

textlang = [detect(elem) if len(elem) > 50 else elem == 'no' for elem in textlist]
Run Code Online (Sandbox Code Playgroud)

或者用循环

  texl70 = df5['Titletext']
  langdet = []                                                    

  for i in range(len(df5)):                                         
    try:                                                          
       lang=detect(texl70[i])                                      
    except:                                                       
       lang='no'                                                  
       print("This row throws error:", texl70[i])                 
    langdet.append(lang)                
Run Code Online (Sandbox Code Playgroud)