LINUX.ORG.RU

слова


0

2

Добрый день.

Есть задача идентификации похожих слов(пока только русский и англ. языки).

Рассматриваемые варианты:
- идентифицировать по корню слова - перечислить все приставки, суффиксы, окончания (или сами корни :) ) и выделять корни из слов.
- представлять слово, как график зависимости веса буквы от её положения в слове(к примеру параболическая зависимость). Тогда по сумме весов, помноженных на коэф. положения в слове(спектр), к примеру опять же, можно судить о похожести слов.

Как бы 2 варианта - первое что пришло в голову и вряд ли лучшее. Задача давно известна, наверняка здесь есть люди, знакомые с ней.

Также в зависимости от решения можно будет подумать о способе составления словаря.

>Есть задача идентификации похожих слов(пока только русский и англ. языки).

Ты сначала скажи, что такое похожее слово.

- идентифицировать по корню слова - перечислить все приставки, суффиксы, окончания (или сами корни :) ) и выделять корни из слов.

Некоторые однокоренные слова очень даже не похожи друг на друга.

anonymous
()
Ответ на: комментарий от anonymous

мне нужно независимо от склонений группировать однокоренные слова. Но не всё так просто - ведь такие слова могут иметь очень разные переводы на другой язык, а мне нужно ещё чтобы и перевод был похож.

pseudo-cat ★★★
() автор топика
Ответ на: комментарий от pseudo-cat

видимо похожие слова, в моём понимание, - однокоренные с однотипным смыслом в переводе. Например кот-кошка в англ. будут как cat; и, соответственно, эти слова относительно перевода похожи. И в обратную сторону. Вот примерно такие зависимости и нужно находить.

Да, я наверное не совсем понимал что мне нужно при составлении вопроса. Вот именно что такое похожесть слов, к примеру в англ., мне и нужно узнать. К примеру cat и cats и cat's я считаю похожими, т.к. зная перевод одного из них(и элементарные правила англ. языка) я могу перевести остальные.

pseudo-cat ★★★
() автор топика
Ответ на: комментарий от psv1967

вот по каким правилам в таких библиотеках идёт нормализация меня и интересует? можно, к примеру, приводить все сущ. к первому роду ед. числу, как мне кажется.

pseudo-cat ★★★
() автор топика

Для идентификации по корню в Natural Lanugage ToolKit для Питона есть stemmers, например:

NAME
    nltk.stem

FILE
    /usr/lib/pymodules/python2.6/nltk/stem/__init__.py

DESCRIPTION
    Interfaces used to remove morphological affixes from words, leaving
    only the word stem.  Stemming algorithms aim to remove those affixes
    required for eg. grammatical role, tense, derivational morphology
    leaving only the stem of the word.  This is a difficult problem due to
    irregular words (eg. common verbs in English), complicated
    morphological rules, and part-of-speech and sense ambiguities
    (eg. C{ceil-} is not the stem of C{ceiling}).

Можно вычленять вручную по регекспам, а можно готовыми стеммерами, вроде Lancaster или Porter:

>>> raw = """DENNIS: Listen, strange women lying in ponds distributing swords
... is no basis for a system of government. Supreme executive power derives from
... a mandate from the masses, not from some farcical aquatic ceremony."""
>>> tokens = nltk.word_tokenize(raw)
>>> porter = nltk.PorterStemmer()
>>> lancaster = nltk.LancasterStemmer()
>>> [porter.stem(t) for t in tokens]
['DENNI', ':', 'Listen', ',', 'strang', 'women', 'lie', 'in', 'pond',
'distribut', 'sword', 'is', 'no', 'basi', 'for', 'a', 'system', 'of', 'govern',
'.', 'Suprem', 'execut', 'power', 'deriv', 'from', 'a', 'mandat', 'from',
'the', 'mass', ',', 'not', 'from', 'some', 'farcic', 'aquat', 'ceremoni', '.']
>>> [lancaster.stem(t) for t in tokens]
['den', ':', 'list', ',', 'strange', 'wom', 'lying', 'in', 'pond', 'distribut',
'sword', 'is', 'no', 'bas', 'for', 'a', 'system', 'of', 'govern', '.', 'suprem',
'execut', 'pow', 'der', 'from', 'a', 'mand', 'from', 'the', 'mass', ',', 'not',
'from', 'som', 'farc', 'aqu', 'ceremony', '.']

Но они только для английского, вроде, плюс работают по-разному и далеко не всегда идеально.

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

Еще просто по словарю синонимов смотри да и все.

xio
()
Ответ на: комментарий от anonymous

Плюсую, еще можно тогда использовать CMU Pronouncing Dictionary, правда только для английского. Например вот так примитивно можно подбирать рифмы для слов (Python с NLTK):

def rhyme_word(target_word):
    """
    >>> print rhyme_word("technology")
    * dbg: target rhyme: ['L', 'AH0', 'JH', 'IY0'] (with stress)
    ['analogy', 'anesthesiology', 'anthology', 'anthropology', ...]
    """

    for word, pron in nltk.corpus.cmudict.entries():
        if target_word == word:
            target_rhyme = pron[-4:]
            break
    print "* dbg: target rhyme: %s (with stress)" % target_rhyme

    # ignore prosody (stress) information (ER0 -- 0 at the end)
    # 106 vs 104 words for "technology"
    rhymed_words_list = []
    for word, pron in nltk.corpus.cmudict.entries():
        if [s.rstrip(str(range(10))) for s in pron[-4:]] \
                == [s.rstrip(str(range(10))) for s in target_rhyme]:
                rhymed_words_list.append(word)

    return rhymed_words_list

xio
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.