在python中使用langdetect时出错:“文本中没有任何功能”

时间:2016-11-24 10:06:59

标签: 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)

但我收到的错误为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)最闷热的最闷热的应变痛苦杀手和心情提升者 2)放松,欣快,surélevée,somnolence,concentré,picotement,une augmentation de l'appétit,soulager la douleur Giggly,physique,espritsédation 3)Reduzierte Angst,Ruhe,gehobener Stimmung,zerebrale Energie,KörperSedierung 4)Calmante,relajante muscle,RelajaciónTsych,disminucióndenáuseas 5)重いフルーティーな幸せ非常に强力な头石のバースト

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:3)

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

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()无法“识别”要在该行中分析的任何字符,这就是错误所暗示的。

其他内容,例如input is only a URL时,也会导致此错误。

答案 1 :(得分:3)

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

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

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

因此,您可以先对文本进行一些预处理,以删除其中row[0]值为空字符串,空值,空格,数字,特殊字符,或简单的记录不包含任何字母。

答案 2 :(得分:0)

问题是空文本或类似''的值,没有值; 在某种情况下检查此内容,并在列表理解或

中循环阅读
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)