CREATE OR REPLACE MACRO is_phrase(lexeme) AS lexeme LIKE '% %'; CREATE OR REPLACE MACRO is_proper_noun(lexeme) AS regexp_matches(lexeme, '^[A-Z][a-z]'); CREATE OR REPLACE MACRO is_clean_word(lexeme) AS NOT is_phrase(lexeme) AND NOT is_proper_noun(lexeme); CREATE OR REPLACE MACRO has_etymology(word_ix) AS word_ix IN (SELECT DISTINCT source FROM links);