15

嘿,我有一个带有多语言文本的 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)

但我得到的错误是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.')

LangDetectException:文本中没有特征。

这就是我的 csv 的样子 1)skunkiest smokiest yummiest strain 止痛药和心情提升剂 2) 放松、欣快、surélevée、嗜睡、concentré、picotement、une augmentation de l'appétit、soulager la douleur Giggly、体质、esprit sédation 3) Reduzierte Angst, Ruhe, gehobener Stimmung, zerebrale Energie, Körper Sedierung 4) Calmante, relajante muscle, Relajación Mental, disminución de náuseas 5) 重いフルーティーなのせ非常に强力な头石幸バースト

请帮我解决一下这个。

4

3 回答 3

16

您可以使用类似这样的方法来检测文件中的哪一行引发了错误:

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)

您将看到的是它可能在“重いフルーティーな幸せ非常に强力な头石のバースト”中失败。我的猜测是detect()无法“识别”该行中要分析的任何字符,这就是错误所暗示的。

其他情况,例如当输入只是一个 URL时,也会导致此错误。

于 2017-10-14T04:30:04.977 回答
6

将没有字母的对象传递给时发生错误detect。至少应该有一封信。

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

detect('.')
detect(' ')
detect('5')
detect('/')

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

于 2020-07-14T18:56:07.693 回答
4

问题是空文本或类似 ' ' 的东西,没有价值;在一个条件中检查这个并在列表理解中循环你的读者或

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]

或带有循环

  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)                
于 2018-09-06T19:15:45.733 回答