user12523: It is easy enough to use a chess engine to "annotate" a game to the extent of pointing out mistakes and blunders: when the evaluation function drops by greater than a certain amount, the move is deemed bad enough to merit a "?" or a "??".
Has anyone tried to develop a program to add exclamation marks to good/brilliant moves? In the eyes of a chess engine, those moves would usually be the best move for the position, but just being the best move does not make a move brilliant, because the best move may be obvious. Exclamation marks are added to moves that are hard to find by humans, which is somewhat subjective. But I imagine one could come up with some rules or heuristics, at least for things such as recognizing sound sacrifices. Or maybe there is a way to train the system using a library of annotated games.
I wouldn't expect such a tool to be better than a good human annotator, but I find the question interesting from an artificial intelligence perspective.

user10687: Lichess has an excellent import tool with computer aided analysis.
After uploading a game and analyzing with Stockfish, you can download an annotated PGN of the game. It adds alternate lines and annotated symbols (?! for inaccuracy, ?? for blunder, etc.)
 In the PGN, move
23. Qf3 looks like: 23. Qf3?? { (3.13 → 0.10) Blunder. Best move was Qg4. }
Here's an example game I uploaded and analyzed. Use the tabs/links below the game "FEN & PGN" > "Download Annotated" to export the annotated PGN.


user3774: It is not an answer, but an extended comment.
A great question, and a very interesting functionality proposal.
I don't know if such a tool exists - however if I were to implement it I'd consider analysing the same position using different strength settings. For example, if the move is only found by the top strength, it is a good candidate for !!. It is more or less easy to implement, but may require some effort tuning up.

user-1: Chesstempo has this function now. 
Ref:
https://beta.chesstempo.com/blog/9/good-move-annotations

12523: <p>It is easy enough to use a chess engine to "annotate" a game to the extent of pointing out mistakes and blunders: when the evaluation function drops by greater than a certain amount, the move is deemed bad enough to merit a "?" or a "??".</p>

<p>Has anyone tried to develop a program to add exclamation marks to good/brilliant moves? In the eyes of a chess engine, those moves would usually be the best move for the position, but just being the best move does not make a move brilliant, because the best move may be obvious. Exclamation marks are added to moves that are hard to find by humans, which is somewhat subjective. But I imagine one could come up with some rules or heuristics, at least for things such as recognizing sound sacrifices. Or maybe there is a way to train the system using a library of annotated games.</p>

<p>I wouldn't expect such a tool to be better than a good human annotator, but I find the question interesting from an artificial intelligence perspective.</p>
 10687: <p><a href="https://lichess.org/paste" rel="nofollow noreferrer">Lichess</a> has an excellent import tool with computer aided analysis.</p>

<p>After uploading a game and analyzing with Stockfish, you can download an annotated PGN of the game. It adds alternate lines and annotated symbols (?! for inaccuracy, ?? for blunder, etc.)</p>

<p><a href="https://i.stack.imgur.com/sqYh1.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/sqYh1.png" alt="Computer analysis"> In the PGN, move
23. Qf3 looks like: <code>23. Qf3?? { (3.13 → 0.10) Blunder. Best move was Qg4. }</code></a></p>

<p>Here's an example <a href="https://lichess.org/QSZqZ5Kf" rel="nofollow noreferrer">game</a> I uploaded and analyzed. Use the tabs/links below the game "FEN &amp; PGN" > "Download Annotated" to export the annotated PGN.</p>

<p><a href="https://i.stack.imgur.com/aWz2z.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/aWz2z.png" alt="Image showing link to download"></a></p>
 3774: <p>It is not an answer, but an extended comment.</p>

<p>A great question, and a very interesting functionality proposal.</p>

<p>I don't know if such a tool exists - however if I were to implement it I'd consider analysing the same position using different strength settings. For example, if the move is only found by the top strength, it is a good candidate for <code>!!</code>. It is more or less easy to implement, but may require some effort tuning up.</p>
 -1: <p>Chesstempo has this function now. </p>

<p>Ref:
<a href="https://beta.chesstempo.com/blog/9/good-move-annotations" rel="nofollow noreferrer">https://beta.chesstempo.com/blog/9/good-move-annotations</a></p>
