2012-02-23 4 views
1

Можно ли использовать слова без использования регулярных выражений в F #?словосочетание без регулярного выражения

Я хочу знать, как я могу написать функцию F #, которая вводит строку и создает ее.

например.

input = "going" 
output = "go" 

Я не могу найти способ, чтобы написать код без использования регулярных выражений:. * Инг \ б и функции, которая будет почти как делать в C# без каких-либо преимуществ замены.

Semi псевдо код, что я пытаюсь написать это:

let stemming word = 
    match word 
    |(word-"ing")+ing -> (word-"ing") 
+0

Да, вы можете. Но как вы можете остановить эти глаголы: «умирать», «надеяться» и «бегать трусцой»? – pad

+0

Да, правда. im, пытаясь реализовать простой стеблем для начала. то я wud добавить дополнительные условия. – codious

+0

@pad Для тех, кто использует cud -> (word- "ing") + "e"? и (word- "ing") - "g" и т. д. – codious

ответ

2

Вот функция, применяя простейшее правило, вытекающий:

let (|Suffix|_|) (suffix: string) (s: string) = 
    if s.EndsWith(suffix) then 
     Some(s.Substring(0, s.Length - suffix.Length)) 
    else 
     None 

let stem = function 
    | Suffix "ing" s -> s 
    | _ -> failwith "Not ending with ing" 

Parameterized active patterns делает шаблон более читаемыми и более удобным в данном случае. Если правила стебля осложняются, вы можете обновить активные шаблоны, чтобы функция stem не изменилась.

+0

безупречный. это то, что я искал, как использовать библиотеку строк и активные шаблоны. – codious

4

Быстрая немного прибегая к помощи показывает, насколько сложной вытекающие является: http://en.wikipedia.org/wiki/Stemming

стандарт, кажется, «Портер Algorithm », кажется, что несколько человек портировали его на .NET. Я считаю, что две версии C# и версия VB.net на домашней странице« Портер-стрим-алгоритм »: http://tartarus.org/martin/PorterStemmer/

I будет использовать одну из этих библиотек из F #, чтобы сделать вывод.

+0

это всегда опция. но для экспериментальной работы какой подход следует рекомендовать? Разберите слово и выполните поиск подстроки, а затем замените индексы вручную? – codious

+1

Да, возможно, список разрезов F # дает неплохой доступ к подстрокам: http://blogs.msdn.com/b/chrsmith/archive/2008/12/09/f-zen-array-slices.aspx – Robert

+0

Благодарим вас за ссылку. – codious

Смежные вопросы