Ошибка использования langdetect в python: "Нет текста в тексте"

Эй, у меня есть 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) Релаксация, эйфория, сурелье, сонливость, сосредоточенность, пикантность, увеличение аппетита, душевное равновесие, физическое состояние, эсприт-сессия 3)Reduzierte Angst, Ruhe, gehobener Stimmung, Zerebrale Energie, Körper Sedierung 4)Calmante, реладжантные мускулистые, Relajación Mental, диссуминация в стихах 5)重い 強力 バ 非常 非常 非常非常

Пожалуйста, помогите мне с этим.

5 ответов

Вы можете использовать что-то вроде этого, чтобы определить, какая строка в вашем файле выдает ошибку:

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, также вызывают эту ошибку.

Ошибка произошла при передаче объекта без букв вdetect. Там должна быть хотя бы одна буква.

Для воспроизведения выполните любую из следующих команд:

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

Итак, вы можете сначала применить некоторую предварительную обработку текста, чтобы удалить записи, в которых row[0]value - это пустая строка, нулевое значение, пробел, число, специальный символ или просто не включает никаких алфавитов.

Проблема в пустом тексте или что-то вроде ' ' без значения; проверить это в условии и зациклить читателя в понимании списка или

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)                

Ошибка возникает, когда в строке нет букв. Если вы хотите игнорировать эту строку и продолжить процесс.

      for i in df.index:
  str = df.iloc[i][1]  
  try:
    lang = detect(str)
  except:
    continue 

Перехватывать все возможные исключения — плохая практика. Позвольте мне предложить что-то более полное, более читабельное и безопасное:

      rx_letters = re.compile("[a-z]+", re.I)

for row in reader:
    try:
        if rx_letters.search(row[0]) is not None:
            row.append(detect(row[0]))
    except LangDetectException as e:
        row.append("?")
        print(f"Lang detect failed for: '{row[0]}'")

rx_lettersпроверку можно пропустить, но я считаю более элегантным проверить самое основное условие.

Другие вопросы по тегам