# Risky words and automatic checks

> The automatic checks applied to reviews and the management of the word lists these checks use.

Source: /en/features/risky-words/

Before publication, every review goes through six automatic checks. The checks **do not reject** a review; they leave a suspicious review for approval and suggest a rejection reason where appropriate. The decision always rests with the moderator. The text checks are applied together to the review's title, text, author name and photo or video descriptions.

## Checks

| Check | What it detects | Result |
|---|---|---|
| **Personal information** | Email address, phone number, ID number (with its check digits), IBAN, card number (with its checksum), full address | Rejection suggested: "Contains personal information" |
| **Profanity** | Words on the profanity list | Rejection suggested: "Contains swearing or insults" |
| **Health claims** | Wording that presents the product as a medicine | Left for approval |
| **Catalogue match** | Whether the reviewed product exists in the catalogue | Left for approval if it does not |
| **Repeated text and bursts** | The same person submitting the same text again within 30 days; text identical to one another person submitted in the last 30 days; more reviews from the same person within an hour than the limit on the **Settings › Automatic checks** tab (reviews for different items of the same order are not counted) | Same person, same text: rejection suggested. Other cases: flagged |
| **Fake review suspicion** | A disposable email address, a return shortly after the review, a review written from the brand's own domain, an address on the staff list | A risk score is calculated; a high score is left for approval, a low score is flagged |

Possible results: **Clean**, **Flagged**, **Left for approval**, **Rejection suggested**. When more than one check returns a result, the most severe result applies. If the [publishing method](/en/features/settings.md) is Automatic or Hybrid, a review is only published automatically when all checks are clean.

- The checks cannot be switched off; they form part of the reasonable and proportionate checks under Article 7/2 of the Turkish Advertising Board's Guideline on Consumer Reviews.
- The personal information patterns and the catalogue match check are fixed.
- Some limits can be changed: the maximum number of reviews accepted from the same person per hour (3 by default) and the return window after a review (14 days by default) on the **Settings › Automatic checks** tab; the profanity, health claim and address words are managed on this screen.

The check results, the suggested reason and the matched words for each review are shown in the review details.

The profanity and health claim lists are applied with the words of the language the review is written in; a review written in Turkish is not caught by the English profanity list. The address words and disposable email domain lists are applied in every language, whatever the review's language.

## Risky words

The **Rules and compliance › Risky words** screen is used to manage the word lists the checks rely on. On wide screens the word lists are on the left and the **Live check** on the right; on narrow screens the live check is shown below the lists. There are four lists:

| List | Wording it detects | Effect |
|---|---|---|
| Abusive language | Words containing swearing or insults | The review is not published automatically; a rejection is suggested |
| Health claims | Wording that presents the product as a medicine, for example "this cream cured my rheumatism" | The review is left for approval |
| Address words | Words showing that a full address has been given (street, district, building), when used together with a house number | Counts as personal information; a rejection is suggested |
| Disposable email domains | Temporary email services | Raises the fake review suspicion |

In each list, Sayproof's **Predefined list** and the words you added for your brand are used together. The predefined list is Sayproof's ready-made word list, prepared and kept up to date by Sayproof; it is checked for every brand. A word in the predefined list cannot be deleted because other brands use it too; if you switch it off, it is only skipped for your brand. The predefined words of the abusive language list are adapted from the Turkish and English lists of LDNOOBW ([List of Dirty, Naughty, Obscene, and Otherwise Bad Words](https://github.com/LDNOOBW/List-of-Dirty-Naughty-Obscene-and-Otherwise-Bad-Words), [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)) and [censor-text/profanity-list](https://github.com/censor-text/profanity-list): and extended with words compiled by Sayproof: inflected forms were reduced to their stems, and words that match everyday Turkish words once letters are folded (such as "şık" or "sıkı") or that are ordinary in shopping reviews (such as "nude" as a lipstick shade) were left out.

At the top of the **Word lists** card there are three buttons: **Add a word** (see [Adding a word](#adding-a-word)), **Add from a file** and **Download** (see [Bulk actions](#bulk-actions)).

### List tabs

Each list opens on its own tab. The tab shows how many words in the list are checked (for example "120 words checked"); for lists whose words are kept per language, this number is for the selected language. If the text in the live check contains words from that list, a marker on the tab shows how many. Below the tabs, a short text explains what the selected list catches and that a review containing these words is not rejected but waits for approval.

### List area

Above the area of the selected list there are these choices:

- **Search:** looks in the word itself or in its note; it applies both to the words you added and to the predefined list. Predefined words that match the search are shown in the **Predefined words matching the search** table.
- **Language:** shown for the lists whose words are kept per language (abusive language, health claims, address words) when there is more than one language. The disposable email domains list shows "This list does not depend on language."

For the selected list (and language), the area has these parts:

1. **Summary tiles:** the **Predefined list** tile shows the number of words in the list and "Checked for every brand" or how many are switched off for your brand; **Open the table in a new tab** opens the whole list in a new tab as a numbered, searchable table (columns **Word**, **What to catch**, **Status**, **Reviews it caught**). The **Your words** tile shows how many words you added for your brand.
2. **Words you added:** shown only if you added words; they appear as clickable chips in a cloud.
3. **Predefined words that need attention:** shown only if a predefined word caught a review, is switched off for your brand or was caught in the live check's text. When you search, **Predefined words matching the search** replaces this table. The columns are **Word**, **What to catch**, **Status** (**On** or **Off for your brand**; the ⓘ in the column header explains both: a review containing an on word waits for approval, an off word isn't checked in your brand's reviews) and **Reviews it caught**; clicking a row opens the word's details panel, where the word can be switched off for your brand. Because the predefined list can contain swear words, it is not shown in full on the screen; the whole list is in the new-tab table and in the file from **Download**.
4. **Words that are never caught:** the exceptions; shown only if there are any (see [Words that are never caught](#words-that-are-never-caught)).

The look of a chip in a cloud:

| Look | Meaning |
|---|---|
| **You** tag | You added the word |
| Number next to the word | How many reviews the word was found in |
| Chip highlighted with an orange border | The word is caught in the text of the live check |

Hovering over a chip shows how the word is caught.

### Word details

Clicking a word in a cloud or a row in the predefined list's table opens the word's details in a side panel: its state (**On**, **Off for your brand** or **Exception**), its source (**Predefined list** or **Your own**), **What to catch** ("similar spellings too" follows the match type if similar spellings are caught as well) with an explanation, how many reviews it was found in and its note, if any. The count is of reviews, not check runs: a review that was corrected and checked again counts once. The **See the reviews** link lists the reviews the word caught, newest first; clicking a review in the list opens its detail panel.

The actions in the panel depend on the word's source:

- A word in the predefined list is switched off for your brand with **Switch off for my brand**; if it is off, **Switch back on** makes it checked again.
- For a word you added, the **Edit** button opens a box that changes the **What to catch** choice (the same picker as in the add form; see [Match types](#match-types)) and the note; for an exception only the note can be changed. The change is saved with **Save**. The word itself cannot be changed in this box.
- A word you added, or an exception, is deleted with **Delete**; you are asked to confirm first. The list of reviews the word caught is deleted with it; the reviews themselves are not affected.
- Sayproof's exceptions in the predefined list apply to every brand; the details panel explains why the word is an exception and offers no action.
- **Use in the live check** adds the word to the text of the live check, so you can see at once what it catches.

### Adding a word

The **Add a word** button at the top of the **Word lists** card opens the add form in the selected list's area, below the search box and above the words; while the form is open, the button cannot be used. In the form, you first answer **What should happen?**:

- **Check for this word:** Adds a new word to the list; a review that contains it waits for approval before it is published. How the word is caught is set with the **What to catch** picker; the list's default match type is preselected (see [Match types](#match-types)). The word is saved with the **Add the word** button.
- **This word is fine for us:** Saves the word as an exception with the **Add as an exception** button. Matches on this word are disregarded for your brand, whichever rule catches it (whole word, start of word, anywhere in the text, pattern or similar spellings). Use this option if a similar-spellings or start-of-word rule catches an ordinary term in your industry by mistake. The word is added to **Words that are never caught**. If you do not want a word in the predefined list to be checked for your brand, switch it off in the predefined list with **Switch off for my brand** instead of adding it as an exception.

You can also write an optional **Note**. If the word you type is already in the selected list, the form says why and the add button cannot be used:

| Case | Warning in the form |
|---|---|
| The word is in your own list | "This word is already in your list." |
| The word is in the predefined list and on | "This word is already in the predefined list and on; no need to add it." |
| The word is in the predefined list but switched off for your brand | "This word is in the predefined list but switched off for your brand." with a **Switch back on** button next to it; the button switches the word back on for your brand. |
| The word is among the words that are never caught | "This word is among the words that are never caught; it can't be added as a word to check." |

### Words that are never caught

The words you added as exceptions and Sayproof's exceptions in the predefined list are shown below the predefined list in a separate cloud headed **Words that are never caught**; the ones you added carry the **You** tag. Matches on these words are disregarded for your brand, whichever rule catches them (whole word, start of word, anywhere in the text, pattern or similar spellings). To remove an exception you added, click the word and use the **Delete** button in the details panel.

### Live check

Write or paste a sample review in the **Live check** box. Words caught by the lists are marked as you type: shortly after you stop typing, the text is checked and the result is shown as "This review would wait for your approval before going live." or "This review is not caught by the word lists." The caught words are marked in the text, and at the same time on the tab of the list concerned and on the word's chip in the cloud or its row in the predefined list's table. If there is more than one language, the language is chosen above the box.

For each match, the wording caught in the text, the word on the list if it differs, the list, the match type and the source (**Predefined list** or **Your own**) are shown. The actions next to a match:

- **Show in the list:** Opens the tab of the list concerned and highlights the word; if the word is in the predefined list, the table opens and the word's row is highlighted.
- **Switch off for my brand:** Switches off a word in the predefined list for your brand.
- **Delete:** Deletes a word you added; you are asked to confirm first.
- **Don't catch “…”:** If the word was caught in the text with a different spelling (for example through similar spellings or a start-of-word rule), adds that spelling as an exception in one click.

When a list changes, the check runs again by itself. The check uses the same word lists and matching rules as the check applied to reviews: the selected language decides the profanity and health claim lists, and the address and disposable email lists are tried in every language. Address words are shown on their own in the check; in reviews they count as an address when a door number is close by (at most three words apart). The check saves nothing. If the search stops early because the text is long or complex, you are told that the result may be incomplete.

### Match types

How a word is caught is set with the **What to catch** picker. The same picker is used in the add form, in the **Edit** box of a word's details and in the **Add from a file** wizard (for rows in the file that do not say how to match). In the picker you first choose a method: **By word** or **By pattern (advanced)**.

- **By word:** **Whole word**, **Start of word** and **Anywhere in the text** are shown as nested checkboxes, each with a short example below it (for example "Words that start with it too: “badly”, “badness”" for **Start of word**). **Whole word** is always ticked. When a wider option is ticked, the narrower ones are ticked too and marked **included**; unticking the wider option goes back to the previous one. A note below the checkboxes reminds you that a wider option covers the narrower ones, so you don't need to add the same word once per option. The **Also catch similar spellings** box is in the same group.
- **By pattern (advanced):** **Wildcard pattern** is chosen as the **Pattern type**; only the Sayproof team defines the **Advanced rule** type. An explanation of how the chosen type works is shown below it.

| Type | How it works |
|---|---|
| Whole word | Only the word itself matches: "bad" matches, "badly" does not. |
| Start of word | Every form beginning with the word matches: "illness" also matches "illnesses". It covers the whole word too. |
| Anywhere in the text | Every occurrence matches: "mail" also matches "gmail". It covers the whole word and the start of word too. Use with care. |
| Wildcard pattern | The `*` sign stands for any sequence of letters: "ill*". Works within a single word and requires at least 3 letters. |
| Advanced rule | A technical rule that only the Sayproof team can define. |

The **Also catch similar spellings** box can be ticked together with **Whole word** and **Start of word**. When it is, spellings with one letter missing, added or changed are also caught in words of 6 letters or more: "scumbag" also catches "scumbg". For shorter words the choice has no effect. While **Anywhere in the text** is chosen, the box cannot be used and says "Not available while “Anywhere in the text” is chosen."; when **By pattern (advanced)** is chosen, the box is not shown. Similar spelling is not a separate match type; it cannot be chosen together with **Anywhere in the text**, **Wildcard pattern** or **Advanced rule** (`similar_not_allowed`). In the predefined list's table, in the word details and in the live check, "similar spellings too" follows the match type of these words.

Matching is resistant to spelling variations; the text and the word are simplified in the same way. Turkish letters (`ı/i`, `ş/s`, `ğ/g`…) are matched, digits and symbols used in place of letters (`qu4l1ty`, `@`) are converted to letters, letters separated by dots or spaces (`q.u.a.l.i.t.y`) are joined, and stretched letters (`quaaality`) are reduced to one. Numbers made up only of digits ("5 stars", "10/10") are left unchanged.

### Bulk actions

The bulk actions are at the top of the **Word lists** card, next to the **Add a word** button:

- **Add from a file:** A CSV or Excel file is uploaded (up to 1 MB and 2,000 rows, one word per row). The wizard has four steps: **File** → **Preview** → **Conflicts** → **Confirm**. The preview shows, with row numbers and reasons, the rows to be added and the rows that already exist, conflict or are invalid. Only new rows are saved; conflicts are resolved by hand. In a file whose first row holds column names (with a `value`, `term` or `word` column), the `suppressed` column is read too: a row with `1`, `true`, `yes`, `evet`, `doğru` or `x` in this column is added as an exception, its match type becomes whole word and the preview's **What to catch** column shows **Exception**. The `match` column gives the row's match type (`word`, `prefix`, `contains`, `pattern`) and the `similar` column whether similar spellings are caught too (the same values as `suppressed`); `similar` can only be used with `word` and `prefix`. A row with `fuzzy` in the `match` column of an older file is read as whole word with similar spellings. Rows that do not say how to match are added with the match type chosen with the **What to catch** picker in the wizard's **File** step; in the preview, "similar spellings too" follows the match type of rows that will catch similar spellings. When compared with the predefined list, a row whose word is already in the predefined list with the same match type counts as **Already there** ("the word is already in the predefined list"). A row counts as a conflict if the word is in the predefined list with a different match type ("the word is in the predefined list with a different match"), or if it is an exception in the predefined list and comes in the file as a word to check ("the word is an exception in the predefined list; it can't be added as a checked word"). A row also counts as a conflict if a word that is checked in your list is marked as an exception in the file.
- **Download:** Exports the selected list in the format picked from the menu (**CSV**, **Excel** or **JSON**). A CSV or Excel file can be imported again; because the file carries the `similar` and `suppressed` columns, the similar spellings choice and the exceptions come back as they were. Rows loaded into a list of another language show as **Invalid**, and words already in the predefined list show as **Already there**.

Using this screen requires the "Can change settings" permission; other roles do not see it in the menu. Every addition, edit and removal is recorded in the **Activity history**.
