как я могу разделить слова, склеенные? - PullRequest
4 голосов
/ 05 января 2010

У меня много файлов с плохим названием

videoofmegoingtoschool.avi

Существует ли библиотека или какой-либо алгоритм, который будет правильно ее отделять?

video of me going to school.avi

Ответы [ 5 ]

3 голосов
/ 05 января 2010

Я не думаю, что там что-то есть. Я мог бы представить программу, которая использует словарь слов и выбирает самое короткое слово, которое соответствует слева направо, а затем, если оно не может найти второе слово, оно не может выполнить поиск следующего наибольшего слова и так далее. (откат в случае необходимости) Однако это может привести к ложным положительным и отрицательным результатам. Звучит как забавная задача для решения!

2 голосов
/ 05 января 2010

Это уже несколько раз обсуждалось здесь, на SO, к сожалению, Сейчас я могу найти только одну ссылку .

РЕДАКТИРОВАТЬ - Дополнительные ссылки:

0 голосов
/ 05 января 2010

В Linux вы можете иметь: / usr / share / dict / american-english


Вы можете попробовать создать слово по одной букве за раз (слева), а затем посмотреть, существует ли оно в этом файле dict целиком. Затем сохраните этот токен как отдельное слово.

0 голосов
/ 05 января 2010

при условии, что у вас есть словарь, а t (str) означает, что str является допустимым словом или группой слов,
t (str) = sum_over_i (t (str [0, i]) && t (str [i + 1, длина])
то есть, чтобы проверить, образует ли groupofwords действительную группу слов, добавьте пробел после первой буквы и посмотрите, можете ли вы по-прежнему формировать слова с обеими половинами; если это не сработает, попробуйте после второй буквы, затем третье ...

при динамическом программировании это можно сделать за O (n ^ 2) раз!

[Редактировать] Людям не нравится мой ответ. Возможно, какой-то псевдокод.

function IsValidString(x)
    if(x is one letter, not 'a' or 'i')
        return false
    if(x is a dictionary word)
        return true
    for i from 0 to x.length-2
        if( IsValidString(x[0,i]) and IsValidString(x[i+1, x.length-1]) )
            return true
    return false

Здесь IsValidString возвращает true, если есть способ разбить строку на отдельные, допустимые слова и false в противном случае. Нетрудно понять, как можно отслеживать, какие значения i (размещение пробела) сделали строку действительной.

0 голосов
/ 05 января 2010

Я подозреваю, что нет. Это даже интересная проблема, которую нужно решить, потому что вы должны определить наиболее «вероятный» способ разделения, и разделение в определенных точках повлияет на будущие разделения. Интересный проект для кого-то в свободное время, но в реальном мире вам придется делать это вручную:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...