ПРОПИТАЙТЕ ЛАТЕКСОМ дополнительные аргументы

Вам будет нужно не один, но несколько хороших алгоритмов, вроде следующего.

  • местоимения игнорирования сделан через стоп-лист .
  • , сохраняющий имена собственные? Вы имеете в виду, обнаруживая именованные сущности, как [1 110] Hoover дам и говоря, что "это - одно слово" или составные существительные, как [1 112] язык программирования ? Я дам Вам подсказку: это - жесткое, но там существуйте библиотеки для обоих. Ищите выделение именованных сущностей (Названный entitiy распознаванием) и лексическое разделение на блоки. OpenNLP является Инструментарий Java, который делает обоих.
  • расстановка переносов игнорирования? Вы имеете в виду, как в разрывах строки? Используйте регулярные выражения и проверьте получающееся слово через поиск по словарю.
  • множественные числа/стемминг обработки: можно изучить стеммер Снежка . Это добивается цели приятно.
  • "группирующиеся" прилагательные с их существительными обычно задача поверхностный синтаксический анализ . Но если Вы смотрите специально для качественных прилагательных (хороший, плохой, поганый, удивительный...), можно интересоваться анализ мнений . LingPipe делает это, и многое другое.

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

, Если Вы идете с Java, объединение Lucene с инструментарий OpenNLP . Вы получите очень хорошие результаты, поскольку Lucene уже встроили стеммер и много учебного руководства. Инструментарий OpenNLP, с другой стороны, плохо документируется, но Вам не будет нужно слишком много из него. Вы могли бы также интересоваться NLTK, записанный в Python.

я сказал бы, что Вы отбрасываете свое последнее требование, поскольку оно включает поверхностный синтаксический анализ, и будет определенно не impove свои результаты.

А-ч, btw. точный термин того document-term-frequency-thing, который Вы искали, называют tf-idf. Это - в значительной степени лучший способ искать частоту документа для условий. Чтобы сделать это правильно, Вы не обойдете использование multidimenional векторные матрицы.

... Да, я знаю. После взятия семинара по IR мое уважение к Google было еще больше. После выполнения некоторого материала в IR мое уважение к ним упало столь же быстрое, все же.

120
задан Will Robertson 28 November 2009 в 13:09
поделиться

4 ответа

Пример из руководства :

\newcommand{\example}[2][YYY]{Mandatory arg: #2;
                                 Optional arg: #1.}

This defines \example to be a command with two arguments, 
referred to as #1 and #2 in the {<definition>}--nothing new so far. 
But by adding a second optional argument to this \newcommand 
(the [YYY]) the first argument (#1) of the newly defined 
command \example is made optional with its default value being YYY.

Thus the usage of \example is either:

   \example{BBB}
which prints:
Mandatory arg: BBB; Optional arg: YYY.
or:
   \example[XXX]{AAA}
which prints:
Mandatory arg: AAA; Optional arg: XXX.
158
ответ дан 24 November 2019 в 01:39
поделиться

Общая идея создания «необязательных аргументов» состоит в том, чтобы сначала определить промежуточную команду, которая просматривает вперед, чтобы определить, какие символы будут следующими в потоке токенов, а затем вставляет соответствующие макросы для обработки аргумент (ы), возникающий при необходимости. Это может быть довольно утомительно (хотя и несложно) при использовании общего программирования TeX. LaTeX's \ @ ifnextchar весьма полезен для таких вещей.

Лучший ответ на ваш вопрос - использовать новый пакет xparse . Он является частью пакета программирования LaTeX3 и содержит обширные возможности для определения команд с весьма произвольными необязательными аргументами.

В вашем примере у вас есть макрос \ sec , который принимает один или два аргумента в скобках. Это может быть реализовано с использованием xparse со следующим:

\documentclass{article}
\usepackage{xparse}
\begin{document}
\DeclareDocumentCommand\sec{ m g }{%
    {#1%
        \IfNoValueF {#2} { and #2}%
    }%
}
(\sec{Hello})
(\sec{Hello}{Hi})
\end{document}

Аргумент {mg} определяет аргументы \ sec ; m означает «обязательный аргумент», а g - «необязательный аргумент в скобках». \ IfNoValue (T) (F) можно затем использовать для проверки, действительно ли присутствует второй аргумент. См. В документации другие разрешенные типы необязательных аргументов.

25
ответ дан 24 November 2019 в 01:39
поделиться

Все, что вам нужно, это следующее:

\makeatletter
\def\sec#1{\def\tempa{#1}\futurelet\next\sec@i}% Save first argument
\def\sec@i{\ifx\next\bgroup\expandafter\sec@ii\else\expandafter\sec@end\fi}%Check brace
\def\sec@ii#1{\section*{\tempa\ and #1}}%Two args
\def\sec@end{\section*{\tempa}}%Single args
\makeatother

\sec{Hello}
%Output: Hello
\sec{Hello}{Hi}
%Output: Hello and Hi
13
ответ дан 24 November 2019 в 01:39
поделиться

Вот моя попытка, хотя она не совсем соответствует вашим требованиям. Не полностью протестировано, поэтому будьте осторожны.

\newcount\seccount

\def\sec{%
    \seccount0%
    \let\go\secnext\go
}

\def\secnext#1{%
    \def\last{#1}%
    \futurelet\next\secparse
}

\def\secparse{%
    \ifx\next\bgroup
        \let\go\secparseii
    \else
        \let\go\seclast
    \fi
    \go
}

\def\secparseii#1{%
    \ifnum\seccount>0, \fi
    \advance\seccount1\relax
    \last
    \def\last{#1}%
    \futurelet\next\secparse
}

\def\seclast{\ifnum\seccount>0{} and \fi\last}%

\sec{a}{b}{c}{d}{e}
% outputs "a, b, c, d and e"

\sec{a}
% outputs "a"

\sec{a}{b}
% outputs "a and b"
0
ответ дан 24 November 2019 в 01:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: