linguistic algorithms