嘿,我有一个带多语言文字的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)重いフルーティーな幸せ非常に强力な头石のバースト
请帮我解决这个问题。
答案 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)